[英]find the location of the cmd.exe file
我已經構建了一個依賴“cmd.exe”來執行某些任務的c ++程序。 現在我和測試目的,該文件的路徑是“c:\\ windows \\ system32 \\ cmd.exe”。 我的問題是有任何c ++ API返回該文件的路徑,知道我的程序必須在win32和win64上工作。
GetSystemDirectory
是一個選項。 對於32位應用程序,它將返回32位系統目錄。 對於x64應用程序,它將返回64位本機系統目錄。
您也可以將CreateProcess
或ShellExecuteEx
與cmd.exe
,它應該在沒有路徑的情況下找到它,除非您特別關注某人操縱搜索路徑並獲取錯誤的cmd.exe
。
如果要啟動.cmd
文件,則可以使用帶有open
動詞的ShellExecuteEx
執行此操作。 通常,對於Windows桌面應用程序,建議使用ShellExecuteEx
來啟動其他程序。 例如,這里有一些代碼將啟動運行test.cmd
腳本的命令提示符並等待結果:
#include <windows.h>
#include <stdio.h>
#pragma comment(lib,"shell32.lib")
void main()
{
SHELLEXECUTEINFOW info = {};
info.cbSize = sizeof( info );
info.lpVerb = L"open";
info.fMask = SEE_MASK_FLAG_NO_UI | SEE_MASK_NOASYNC | SEE_MASK_NOCLOSEPROCESS;
info.lpFile = L"test.cmd";
info.lpParameters = nullptr; // Command-line parameters
info.lpDirectory = nullptr; // Working directory to set
info.nShow = SW_SHOW;
if( !ShellExecuteExW( &info ) )
{
printf("ERROR\n");
}
else
{
// Wait for process to finish.
WaitForSingleObject( info.hProcess, INFINITE );
// Return exit code from process
DWORD exitcode;
GetExitCodeProcess( info.hProcess, &exitcode );
CloseHandle( info.hProcess );
printf("Finished with exit code %u\n", exitcode);
}
}
您還可以使用:
info.lpFile = L"cmd.exe";
info.lpParameters = L"/c test.cmd";
使用
ShellExecuteEx
而不是CreateProcess
主要原因是ShellExecuteEx
可以使用正確的清單元素處理exes的管理員提升請求。 如果目標EXE需要比當前進程更高的權限,CreateProcess
將失敗。
解釋器路徑在%COMSPEC%
環境變量中可用,可以使用GetEnvironmentVariable()
讀取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.