C# のアプリケーションで設定したプロセス内環境変数をバッチファイルや wsh で参照したいケースがあったので、テストしてみました。
また、「親プロセスのプロセス内環境変数は子プロセス実行時にコピーされる」との話だったので、ついでにテストしてみました。
Program.cs
class Program
{
static void Main(string[] args)
{
Environment.SetEnvironmentVariable("WORK", "work", EnvironmentVariableTarget.Process);
Process proc = Process.Start("test.bat");
proc.WaitForExit();
}
}
test.bat
echo %WORK%
set WORK2=WORK2
call test2.bat
pause
test2.bat
echo %WORK%
echo %WORK2%
set WORK3=Work3
CScript test3.js
test3.js
var wsh = WScript.CreateObject("WScript.Shell");
var env = wsh.Environment("Process");
WScript.Echo(env.item("WORK"));
WScript.Echo(env.item("WORK2"));
WScript.Echo(env.item("WORK3"));
output
>echo work
work
>set WORK2=WORK2
>call test2.bat
>echo work
work
>echo WORK2
WORK2
>set WORK3=Work3
>CScript test3.js
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
work
WORK2
Work3
>pause
続行するには何かキーを押してください . . .
このように、子は親のプロセス内環境変数も参照できるみたいです。