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
。