5

対応する環境変数をプロセスに渡す際に問題が発生しています。以下に私のコードの一部を示しますので、私がやろうとしていることを理解することができます。

実行する必要がある 2 つの EXE ファイルがあります。プロセスは、環境変数の場所に基づいていくつかの更新を実行します%MainFiles%。コードを実行すると、EXE ファイルが変更を認識していないようです。ただし、コンピューターのプロパティの下を見ると、変数が正しく変更されていることがわかります。

プロセスに変更を強制的に認識させる方法を知っている人はいますか? ありがとう

while ($i -lt $Size) {
  if ($TempEnv[$i] -eq "Done"){
    $ExitCode="Completed"
    return
  } else {
    $Temp = $TempEnv[$i]
    Write-Host ("Starting Update for  " + $Temp) -foregroundcolor "Green"

    [System.Environment]::SetEnvironmentVariable("MainFiles", "$Temp","Machine")
    [System.Environment]::GetEnvironmentVariable("MainFiles","Machine")
    Copy-Item $CopyInstallData -destination $Temp
    $process = Start-Process XMLUpgrade.exe -WorkingDirectory "C:\Program Files\Dtm" -wait
    $process = Start-Process Update.exe -WorkingDirectory "C:\Program Files\Dtm" -wait
.
.
.
4

1 に答える 1

4

この行は、env var の変更を永続的にします。

[System.Environment]::SetEnvironmentVariable("MainFiles", "$Temp","Machine")

残念ながら、これを設定する前に、PowerShell は既に起動されています。その env ブロックは、起動時にスナップショットされます。その環境は、生成された 2 つのプロセスが継承するものです。

2 つのプロセスを正しい環境変数値で起動するには、まず次のようにします。

$env:MainFiles = $Temp
于 2013-04-19T23:56:40.683 に答える