![](/img/trans.png)
[英]Where to define constants for use in a template member variable of a class in C++?
[英]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.