2017-01-21 6 views
0

私はC#を使用して実行しようとしている2つのバッチスクリプトを持っています。C#プログラムを実行し、実行後に環境変数を取得する

私が持っているコードは、私が取得する環境変数は、プロセスがないバッチファイルを設定しているか、もともと持っていたものであるように見える

string finalEnvVarsFile = Path.GetTempFileName(); 
string arguments = string.Format("/c {0} & {1} & set > {2}", "foo.bat", "bar.bat", finalEnvVarsFile); 

// Helper to run processes easier and reads in stdout and stderr. 
ProcessHelper processHelper = ProcessHelper.Create("cmd.exe", arguments); 
bool success = processHelper.Run(null, true, true); 
foreach (var envVar in File.ReadAllLines(finalEnvVarsFile)) 
{ 
    Console.WriteLine("Environment Variable: " + envVar); 
} 

です。何か間違っているのですか、何らかの理由でバットファイルが正しく実行されていませんか?これを行うより良い方法はありますか?

+1

' "FOO、バットは"' - あなたは 'foo.bat'を意味するのですか? (文字列 'arguements'の中で)? –

+0

ああ、そうです。私は実際の名前を置き換えたのは、彼らの目的が本当に関連していないからです。 – user2460953

+0

あなたの実際のコードがそうでないことを確認したかっただけです。 –

答えて

0

あなたのC#アプリケーションは、パラメータとして次の文字列でcmd.exeを実行します:

/c foo.bat & bar.bat & set > "File name of temporary file with full path for variables" 

私はC#のプログラマーではないんだし、提供C#のコードをテストするために設置全く開発環境を持っていません。したがって、私は最後のファイル名が二重引用符で囲まれている可能性が高いとは限りませんが、この部分が動作するように見えます。

  1. をC#アプリケーションから継承された環境変数とコマンド行
    cmd.exe /c foo.bat
    有する第一コマンド処理:実行中しかし、このコマンドラインの結果(最も可能性が高い)

  2. コマンドラインC#アプリケーションから継承された環境変数を使用してWindows
    によって cmd.exe /c bar.bat
    を実行する際に得
    bar.bat
    有する第2のコマンド処理。

  3. コマンドラインC#アプリケーションから継承された環境変数を使用してWindows
    によって cmd.exe /c set > "File name of temporary file with full path for variables"
    を実行する際に得
    set > "File name of temporary file with full path for variables"
    と3番目のコマンドプロセス。今、2つのバッチファイルとコマンドSETがで実行されている

    cmd.exe /c "foo.bat & bar.bat & set > "File name of temporary file with full path for variables"" 
    

    string arguments = string.Format("/c \"{0} & {1} & set > {2}\"", "foo.bat", "bar.bat", finalEnvVarsFile); 
    

    この結果の実行中:私はあなたのC#のソース・ファイルで使用することをお勧め

同じコマンド・プロセスとテンポラリ・ファイルかもしれない(検証されていない)には、変更された環境変数が含まれています。

も参照の答え:
Difference in Delayed expansion of ERRORLEVEL on cmd prompt and win32_process

関連する問題