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

时间:2019-06-28 14:25:52

标签: c++ windows activation

我正在创建一个Windows实用程序,部分允许用户激活Windows。当我用slmgr /ato运行命令system()时,出现错误“ 0x80004001 Not Implemented(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的计算机上时,这种方式才会失败。

1 个答案:

答案 0 :(得分:0)

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