我可以让Windows服务运行批处理文件来修改环境变量吗?

时间:2013-08-05 17:15:33

标签: windows

我创建了一个应用程序(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工作,则可以为我的服务提供其他权限。

0 个答案:

没有答案