Я пытаюсь сделать программу удаления Центра обновления Windows на C ++, но всякий раз, когда я пытаюсь вызвать wusa, она завершается катастрофическим отказом 0x80000ffff. Я вызываю ту же команду в командной строке, и она отлично работает. Как это исправить?
Вот функция, которую я использую для вызова wusa:
system("wusa /uninstall /kb:2511455");
Я выяснил, как решить эту проблему, и в будущем я опубликую свое решение для тех, у кого такая же проблема. Команда system () выполняла 32-битный исполняемый файл внутри% windir% \ SysWoW64 \ вместо собственной 64-битной версии. Для решения этой проблемы мне пришлось использовать следующее:
PVOID OldValue = NULL;
if( Wow64DisableWow64FsRedirection(&OldValue) )
{
// Anything in this block uses the system native files and not the WoW64 ones
// put native WoW64 code here
system("wusa /uninstall /kb:2511455");
//system("wusa /?"); // use this for testing
// Immediately re-enable redirection. Note that any resources
// associated with OldValue are cleaned up by this call.
if ( FALSE == Wow64RevertWow64FsRedirection(OldValue) )
{
// Failure to re-enable redirection should be considered
// a criticial failure and execution aborted.
return 0;
}
}