从 C++ 程序激活 windows 时出错

Error when activating windows from c++ program

我正在创建一个 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 的机器上时才会以这种方式失败。

好的,我终于想通了。我将我的程序编译为 32 位应用程序,因为最初将其编译为 64 位时我遇到了麻烦。 Windows 不允许 32 位应用程序访问 64 位库和可执行文件,显然这也适用于它们创建的任何子进程。我的猜测是 slmgr.vbs 脚本试图访问 64 位文件或库,但找不到它,因此出现 "not implemented" 错误消息。我重新编译为 64 位应用程序,现在似乎可以正常工作。这个绝对考验我的耐心。