我创建了一个应用程序(C ++中的,虽然我认为不重要)作为Windows服务运行,此服务的目的是启动和管理其他应用程序和脚本文件
它必须运行的一些脚本文件需要创建和修改可由其他脚本和应用程序访问的环境变量。
如果我使用内容创建.bat文件:
SETX /M fooVar 101010101
并从具有管理员权限的cmd.exe窗口运行它然后它可以工作。但是,当我使用Createprocess从我的服务运行它时,如下所示:
CreateProcess( LPTSTR(filePath.c_str()), //path and application name
LPTSTR(cmdArgs.c_str()), // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
TRUE, // Set handle inheritance
NULL, // Creation flags
LPTSTR(envVars.c_str()), // Environment Variables
LPTSTR(launchDir.c_str()), // Starting Directory
&si, // Pointer to STARTUPINFO structure
&pi ) // Pointer to PROCESS_INFORMATION structure
其中:
filepath
= C:\ Windows \ System32 \ cmd.exe
cmdArgs
= / c“C:\ testFiles \ foo.bat”
然后标准输出读取:
C:> SETX / M fooVar 101010101
成功:保存了指定的值。
然而环境变量尚未改变。
我想避免更改我的应用程序,理想情况下,我正在寻找替代setx /M
以便在Windows脚本服务中使用的bat脚本。或者,如果允许setx /M
工作,则可以为我的服务提供其他权限。