簡體   English   中英

在C++中定義新的環境變量並在bat文件中使用

[英]Define in C++ new environment variable and use it in bat file

很簡單,我想在C++中使用SetEnvironmentVariable定義一個新的環境變量,然后調用一個使用它的bat文件。 這是我的 C++ 代碼;

PROCESS_INFORMATION processInformation = { 0 };
STARTUPINFO startupInfo = { 0 };

SetEnvironmentVariable("GSDebbugingDir", "Hello");

BOOL result = CreateProcess(NULL,
                                    "dummy.bat"),
                                    NULL,
                                    NULL,
                                    FALSE,
                                    CREATE_NO_WINDOW,
                                    NULL,
                                    NULL,
                                    &startupInfo,
                                    &processInformation);

我的 dummy.bat 文件是:

@echo off    
echo GSDebbugingDir = %GSDebbugingDir%    
if defined GSDebbugingDir mkdir c:\temp\dummy    
pause

但這並沒有輸出 GSDebbugingDir 變量的值。 問題是什么?

CreateProcess 文檔說:

要運行批處理文件,您必須啟動命令解釋器 將 lpApplicationName 設置為 cmd.exe 並將 lpCommandLine 設置為以下參數:/c 加上批處理文件的名稱。

這是有道理的,因為 .bat 文件本身並不是一個可執行模塊。 但是,相反的是對醫生說很適合我用下面的代碼UseApplicationName不#define的,即具有置入“cmd.exe的” commandLine

此外,要查看 bat 文件的輸出,您可能想要刪除該CREATE_NO_WINDOW標志

//#define UseApplicationName
#ifdef UseApplicationName
TCHAR  commandLine[] = _T(" /c dummy.bat");
#else
TCHAR  commandLine[] = _T("cmd.exe /c dummy.bat");
#endif

BOOL result = CreateProcess(
#ifdef UseApplicationName
    _T("cmd.exe"),
#else
    NULL,
#endif
    commandLine,
    NULL,
    NULL,
    FALSE,
    0, //CREATE_NO_WINDOW,
    NULL,
    NULL,
    &startupInfo,
    &processInformation);

順便說一句,請注意

此函數的 Unicode 版本 CreateProcessW 可以修改此字符串的內容。 因此,此參數不能是指向只讀內存的指針(例如 const 變量或文字字符串)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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