温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Error when activating windows from c++ program
c++ windows activation

其他 - 从C ++程序激活Windows时出错

发布于 2020-03-27 12:07:04

我正在创建一个Windows实用程序,部分允许用户激活Windows。当我运行命令时slmgr /atosystem()出现错误“ 0x80004001未实现(SWbemObjectEx)”。当我尝试从cmd执行同一命令时,效果很好。还应该注意的是,它不会每次都失败,有一半的时间它会完美运行。起初我以为我可能连续执行命令的速度过快,但是增加延迟似乎并没有什么不同。

void activateWindows(char* key)
{
    EnableWindow(Main_activate_win, false);
    char cmd[41];
    sprintf(cmd, "slmgr /ipk %s", key);
    system(cmd);
    //Sleep(5000);
    system("slmgr /ato");
    EnableWindow(Main_activate_win, true);
}

编辑:似乎只有在将它安装到以前安装了不同版本Windows的计算机上时,这种方式才会失败。

查看更多

查看更多

提问者
Zachary Schroeder
被浏览
168
Zachary Schroeder 2019-07-03 23:53

好吧,我终于明白了。我将程序编译为32位应用程序,因为最初将其编译为64位时遇到了麻烦。Windows不允许32位应用程序访问64位库和可执行文件,而且显然也适用于它们创建的任何子进程。我的猜测是slmgr.vbs脚本想访问64位文件或库,但找不到它,因此出现“未实现”错误消息。我将其重新编译为64位应用程序,现在看来工作正常。这无疑测试了我的耐心。