我试图用c ++中的代码打开sigverif.exe,但返回值为2而.exe无法打开
ShellExecute(NULL, _T("open"), _T("C:\\Windows\\System32\\sigverif.exe"), NULL, NULL, SW_RESTORE);
如果我从运行命令键入
打开sigverif.exe" C:\ Windows \ System32下\ Sigverif.exe运行"
一切正常
可能是什么问题?
答案 0 :(得分:3)
返回值为2且.exe无法打开
基于System Error Codes的返回值表示 ERROR_FILE_NOT_FOUND 。
是的,确实您的应用程序无法找到给定的路径,因为您在x86
上构建了它,其中Windows的自动重定向涉及,并将C:\Windows\System32
替换为{ {1}},包含Windows的32位二进制文件。
您有两种选择:
您可以使用C:\Windows\SysWOW64
在x64
或disable the automatic redirection上构建它,如下所示:
Wow64DisableWow64FsRedirection
请注意PVOID OldValue = nullptr;
Wow64DisableWow64FsRedirection(&OldValue);
ShellExecute(NULL, _T("open"), _T("C:\\Windows\\System32\\sigverif.exe"), NULL, NULL, SW_RESTORE);
在当前主题中全局影响,因为您可以在页面中找到更多详细信息:
注意
Wow64DisableWow64FsRedirection
函数会影响当前线程执行的所有文件操作,如果在任何时间内禁用文件系统重定向,都会产生意外后果....
因此,请确保它不会无意中影响其他操作,或者在通过调用Wow64EnableWow64FsRedirection解决您的愿望后立即将其重新设置为Wow64DisableWow64FsRedirection
。