ShellExecute 以在 C++ 中打开.exe
ShellExecute to open an .exe in C++
我正在尝试从 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
。
相关文章:
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 以在Qt中的IF语句中设置时间延迟
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面
- 不确定如何装饰我的C++库代码以在 C 中使用
- 如何从Windows控制台调用.exe(C++)以在不同的目录(或任何目录)中创建文件夹?
- 如何注册Qt C++对象以在QML中使用它
- 将 std::vector<double> 从 C++ 包装到 C 以在 Swift 中使用
- LLVM 传递以在特定地址分配内存
- 调试控制台 ChessEngine.exe "used"在另一个应用程序(国际象棋 GUI)中
- 测量时间以在 c++ 中生成更好的随机数
- 坚持编译QDoc以在Windows上构建qt5
- 传递指针数组以在 Vivado HLS (SDSoC 2018) 中发挥作用
- 唤醒多个线程以在每个条件下工作一次
- 如何获得CMake Tools以在Visual Studio Code中编译具有C++11(或更高版本)功能的程序?
- 需要帮助编写 for 循环以在字符串周围创建边框
- 递增 'int i = 0' 以在初始化的字符数组的位置递增
- 为什么我应该重载 () 运算符以在结构而不是类中priority_queue?
- 我的视频流程在运行darknet.exe以进行检测对象时崩溃了
- ShellExecute 以在 C++ 中打开.exe
- 获取Visual Studio项目名(或exe文件名)以在C++程序中使用它