簡體   English   中英

找到cmd.exe文件的位置

[英]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位本機系統目錄。

您也可以將CreateProcessShellExecuteExcmd.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM