C++ ShellExecute以在C++;

C++ ShellExecute以在C++;,c++,shellexecute,C++,Shellexecute,我试图从C++中的代码打开SigVIEF.EXE,但是返回值是2,.exe不打开 ShellExecute(NULL, _T("open"), _T("C:\\Windows\\System32\\sigverif.exe"), NULL, NULL, SW_RESTORE); 如果我通过运行命令键入打开sigverif.exe “C:\Windows\system32\sigverif.exe” 它很好用 可能是什么问题 返回值为2且.exe未打开 ShellExecute(NULL, _T

我试图从C++中的代码打开SigVIEF.EXE,但是返回值是2,.exe不打开

ShellExecute(NULL, _T("open"), _T("C:\\Windows\\System32\\sigverif.exe"), NULL, NULL, SW_RESTORE);
如果我通过运行命令键入打开sigverif.exe

“C:\Windows\system32\sigverif.exe”

它很好用

可能是什么问题

返回值为2且.exe未打开

ShellExecute(NULL, _T("open"), _T("C:\\Windows\\System32\\sigverif.exe"), NULL, NULL, SW_RESTORE);
基于meansERROR\u FILE\u NOT\u FOUND的返回值

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

您有两个选择:

您可以在
x64
上构建它,也可以使用
wow64禁用wow64fsredirection
如下所示:

PVOID OldValue = nullptr;
Wow64DisableWow64FsRedirection(&OldValue);
ShellExecute(NULL, _T("open"), _T("C:\\Windows\\System32\\sigverif.exe"), NULL, NULL, SW_RESTORE);
请注意,
Wow64DisableWow64FsRedirection
在当前线程中全局影响,您可以在页面中找到更多详细信息:

注意Wow64DisableWow64FsRedirection函数会影响当前线程执行的所有文件操作,如果文件系统重定向在任何时间段内被禁用,则可能会产生意外后果

因此,请确保它不会无意中影响其他操作,或者在通过调用解决您的需求后立即将其设置回
enabled

返回值为2且.exe未打开

ShellExecute(NULL, _T("open"), _T("C:\\Windows\\System32\\sigverif.exe"), NULL, NULL, SW_RESTORE);
基于meansERROR\u FILE\u NOT\u FOUND的返回值

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

您有两个选择:

您可以在
x64
上构建它,也可以使用
wow64禁用wow64fsredirection
如下所示:

PVOID OldValue = nullptr;
Wow64DisableWow64FsRedirection(&OldValue);
ShellExecute(NULL, _T("open"), _T("C:\\Windows\\System32\\sigverif.exe"), NULL, NULL, SW_RESTORE);
请注意,
Wow64DisableWow64FsRedirection
在当前线程中全局影响,您可以在页面中找到更多详细信息:

注意Wow64DisableWow64FsRedirection函数会影响当前线程执行的所有文件操作,如果文件系统重定向在任何时间段内被禁用,则可能会产生意外后果


因此,请确保它不会无意中影响其他操作,或者在通过调用解决您的愿望后,立即将其设置回启用状态。

反斜杠\在字符串中具有特殊含义。使用两个\\转义它,或将字符串逐字写入“字符串”同一行代码用于打开同一位置的其他可执行文件使用一个“\”而不是2“/”。注意标记处理什么
SW_RESTORE
?您不应该使用
SW\u SHOW
?非常肯定,这是打开新窗口的默认模式。考虑C:\Windows \ SysSnistic,因此它甚至可以在32位进程中工作。反斜杠\在字符串中有特殊含义。使用两个\\转义它,或将字符串逐字写入“字符串”同一行代码用于打开同一位置的其他可执行文件使用一个“\”而不是2“/”。注意标记处理什么
SW_RESTORE
?您不应该使用
SW\u SHOW
?非常肯定,这是打开新窗口的默认模式。考虑C:\Windows \ SysSnistic,因此它甚至可以在32位进程中工作。