ShellExecute 以在 C++ 中打开.exe

ShellExecute to open an .exe in C++

本文关键字:exe 以在 C++ ShellExecute      更新时间:2023-10-16

我正在尝试从 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">

它工作正常

可能是什么问题?

返回值为 2 且.exe不打开

基于系统错误代码的返回值表示ERROR_FILE_NOT_FOUND

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

您有两种选择:

要么只在x64上构建它,要么通过使用Wow64DisableWow64FsRedirection禁用自动重定向,如下所示:

PVOID OldValue = nullptr;
Wow64DisableWow64FsRedirection(&OldValue);
ShellExecute(NULL, _T("open"), _T("C:\Windows\System32\sigverif.exe"), NULL, NULL, SW_RESTORE);

请注意,Wow64DisableWow64FsRedirection在当前线程中全局影响,因为您可以在页面中找到更多详细信息:

注意Wow64DisableWow64FsRedirection函数会影响当前线程执行的所有文件操作,如果文件系统重定向被禁用任何时间长度,这可能会产生意想不到的后果。

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