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

标签 c++ windows activation

我正在创建一个 Windows 实用程序,它在某种程度上允许用户激活 Windows。当我使用 system() 运行命令 slmgr/ato 时,我收到错误“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 位文件或库,但找不到它,因此出现“未实现”错误消息。我重新编译为 64 位应用程序,现在似乎可以正常工作。这绝对是在考验我的耐心。

关于c++ - 从 C++ 程序激活 Windows 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56808707/

相关文章:

c++ - vector.size() 的 GDB 错误值

c++ - Filtergraph 在第一次数据通过后停止

java - 使用 javamail 通过 Swing 查看电子邮件

c - Windows : trouble with command line arguments 上的进程和线程 C 编程

java - 在 Java Runtime Exec 中使用重定向运算符

java - 启用 CORS Apache Tomcat 7.0.52

email - OctoberCMS:如何在 Rainlab.User 插件中通过电子邮件设置用户帐户激活?

c++ - 使用按位运算符将几个整数合并为 unsigned long long(64 位)

c++ - 仅在 Release模式下出现编译错误——STL vector

Windows Azure : Creation of a file on cloud blob container