定义C++新的环境变量并在 bat 文件中使用它
Define in C++ new environment variable and use it in bat file
这很简单,我想使用 SetEnvironmentVariable 在C++中定义一个新的环境变量,然后调用使用它的 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);
我的虚拟.bat文件是:
@echo off
echo GSDebbugingDir = %GSDebbugingDir%
if defined GSDebbugingDir mkdir c:tempdummy
pause
但这并没有超出GSDebbugingDir变量的值。问题出在哪里?
CreateProcess
文档说:
若要运行批处理文件,必须启动命令解释器;将 lpApplicationName 设置为 cmd.exe并将 lpCommandLine 设置为以下参数:/c 加上批处理文件的名称。
这是有道理的,因为.bat文件本身不是可执行模块。 但是,与文档所说的相反,以下代码适用于我UseApplicationName
而不是 #defined,即将"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 变量或文本字符串(的指针。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 定义C++新的环境变量并在 bat 文件中使用它
- 我可以通过设置工具链文件来替换调用 cmake -G<generator> 选项和调用 vcvarsall.bat吗?
- 如何在%appdata%中创建文件夹,在其中创建.bat文件,然后执行它?
- 如何在项目中嵌入 bat 文件
- 如何使用.bat文件在VS2010中添加环境变量
- 执行带有参数的 .bat 文件并以 C++ 格式读取控制台输出
- 在Windows中使用g++构建C++文件,但不能作为.bat使用
- 解决系统函数以运行来自 vc++ 的 arg 的 bat 文件
- 在VS cmd提示符下运行.bat文件