5

在将相应的环境变量传递给进程时,我遇到了一些问题。您可以在下面看到我的部分代码,以便您了解我要做什么。

我有两个需要运行的 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 块在启动时被快照。该环境是两个衍生进程所继承的。

要使用正确的环境变量值启动两个进程,请先执行以下操作:

$env:MainFiles = $Temp
于 2013-04-19T23:56:40.683 回答