Ошибка при активации Windows из программы C ++ - PullRequest
2 голосов
/ 28 июня 2019

Я создаю утилиту для Windows, которая частично позволяет пользователю активировать Windows.когда я запускаю команду slmgr /ato с system(), я получаю сообщение об ошибке «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.

1 Ответ

0 голосов
/ 03 июля 2019

ОК, я наконец понял это. Я компилировал свою программу как 32-битное приложение, потому что у меня были проблемы при компиляции как 64-битной изначально. Windows не позволяет 32-битным приложениям получать доступ к 64-битным библиотекам и исполняемым файлам, и, очевидно, это также относится к любым созданным ими дочерним процессам. Я предполагаю, что сценарий slmgr.vbs пытался получить доступ к 64-битному файлу или библиотеке и не смог найти его, поэтому появилось сообщение об ошибке «не реализовано». Я перекомпилировал как 64-битное приложение, и теперь оно работает нормально. Этот определенно проверил мое терпение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...