从VBScript重新读取环境变量

从VBScript重新读取环境变量,vbscript,scripting,wix,windows-installer,environment-variables,Vbscript,Scripting,Wix,Windows Installer,Environment Variables,我正在从MSI安装程序(使用WiX工具集创建)运行VBScript。此脚本使用PATH环境变量检查是否存在其他软件 是否已安装。安装程序还提供了一个重试按钮,可以再次运行脚本 现在的问题是:如果在安装程序运行时更改了PATH环境变量,脚本将无法检测到该更改。我的脚本仅在重新启动安装程序后使用PATH环境变量的新值 所以问题是:如何强制安装程序进程使用VBScript更新其环境变量副本 编辑: 它似乎解释了如何使用PowerScript解决问题。但是我需要一个VBScript的解决方案 With

我正在从MSI安装程序(使用WiX工具集创建)运行VBScript。此脚本使用PATH环境变量检查是否存在其他软件 是否已安装。安装程序还提供了一个重试按钮,可以再次运行脚本

现在的问题是:如果在安装程序运行时更改了PATH环境变量,脚本将无法检测到该更改。我的脚本仅在重新启动安装程序后使用PATH环境变量的新值

所以问题是:如何强制安装程序进程使用VBScript更新其环境变量副本

编辑:

它似乎解释了如何使用PowerScript解决问题。但是我需要一个VBScript的解决方案

With WScript.CreateObject("WScript.Shell")
    .Environment("PROCESS")("PATH") = .ExpandEnvironmentStrings(Replace( _ 
        .Environment("USER")("PATH") & ";" & .Environment("SYSTEM")("PATH"), ";;", ";" _ 
    ))
End With 
这将使用从注册表中为
用户
系统
环境变量检索的信息覆盖内存中的当前进程
路径
环境变量


注意:以前的代码仅更新执行代码的
[c|w]脚本
进程的环境副本。它不会更新安装程序的环境副本(您不能更新另一个进程环境)。

或者,从
jscript
(仍然是
cscript
解释器,但使用jscript语言)


必须有更好的方法来检测是否安装了其他软件,例如注册表项、产品代码、组件guid、文件搜索。请注意,在安装过程中,另一个MSI无法运行。由于MSI处理环境变量的方式,不太可能有一个简单的修复方法,所以我会为其他软件寻找另一种检测方法,而不必担心安装过程中路径的变化。
// Re-read PATH vars in case they've changed
var shell = new ActiveXObject("WScript.shell");
var newPath = (shell.Environment("USER")("PATH") + ";" + shell.Environment("SYSTEM")("PATH")).replace(/;;/g, ";");
// Expand any %STRINGS% inside path and set to the new running process
shell.Environment("PROCESS")("PATH") = shell.ExpandEnvironmentStrings(newPath);

shell.Exec('myprocess.exe'); // throws exception if not found