Posted at

親プロセスで設定したプロセス内環境変数を外部スクリプトから参照してみる

More than 3 years have passed since last update.

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
続行するには何かキーを押してください . . .


このように、子は親のプロセス内環境変数も参照できるみたいです。