0

我创建了一个作为 Windows 服务运行的应用程序(在 C++ 中,尽管我认为这并不重要),该服务的目的是启动和管理其他应用程序和脚本文件。

它必须运行的一些脚本文件需要创建和修改其他脚本和应用程序可以访问的环境变量。

如果我创建一个包含内容的 .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

4

0 回答 0