2017-10-04 225 views
0

我想從我的代碼在C打開Sigverif.exe運行++,但返回的值是2和.exe不開ShellExecute的在C++中打開一個.exe

ShellExecute(NULL, _T("open"), _T("C:\\Windows\\System32\\sigverif.exe"), NULL, NULL, SW_RESTORE); 

如果我打開Sigverif.exe運行從運行命令輸入

「C:\ WINDOWS \ SYSTEM32 \ Sigverif.exe運行」

它工作正常

可能是什麼問題?

+0

反斜線\在字符串中有特殊含義。使用兩個\\或者將字符串寫成逐字符「@」字符串「' – Havenard

+0

同一行代碼可用於在同一位置打開其他可執行文件 –

+0

使用'\'而不是2'//'。注意標誌 – sam

回答

2

返回值是2和.exe不會打開

基於System Error Codes返回值意味着ERROR_FILE_NOT_FOUND

是的,的確是你的應用程序未能找到指定的路徑,因爲你可能建立它x86,其中的Windows的自動重定向涉及,並與C:\Windows\SysWOW64,其中包含32位二進制文​​件爲Windows替代C:\Windows\System32

你有兩個選擇:

要麼你只需使用Wow64DisableWow64FsRedirection如下建立它x64,或disable the automatic redirection

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

注意Wow64DisableWow64FsRedirection在當前線程全球影響,因爲你可以在頁面中查看更多詳細信息:

注意 The Wow64DisableWow64FsRedirection功能影響當前線程,它可以產生意想不到的後果,如果文件系統重定向是任何時間長度禁用執行所有文件操作....

所以一定要確保它不會影響其它動作無意,或在您的願望通過調用Wow64EnableWow64FsRedirection解決後立即重新設置爲enabled