ShellExecute在C ++中打开.exe

时间:2017-10-04 06:23:07

标签: c++ shellexecute

我试图用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运行"

一切正常

可能是什么问题?

1 个答案:

答案 0 :(得分:3)

  

返回值为2且.exe​​无法打开

基于System Error Codes的返回值表示 ERROR_FILE_NOT_FOUND

是的,确实您的应用程序无法找到给定的路径,因为您在x86上构建了它,其中Windows的自动重定向涉及,并将C:\Windows\System32替换为{ {1}},包含Windows的32位二进制文​​件。

您有两种选择:

您可以使用C:\Windows\SysWOW64x64disable 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