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 サービスから動作するバット スクリプトで使用する代わりの方法を探しています。または、それが機能する場合は、サービスに追加のアクセス許可を与える方法setx /M

4

0 に答える 0