【发布时间】:2016-10-17 10:43:28
【问题描述】:
我正在将 DLL 安装到我的程序自己的目录中,我正在将自己添加到路径环境变量中。
<Environment Id="NewEnvironment1" Name="Path" Value="[INSTALLDIR]Core" Separator=";" Action="set" Part="last" Permanent="no" System="yes" />
然后我调用一个 Visual Basic 程序,然后使用需要使用路径上的 DLL 的 excel。 Excel 抱怨找不到我的 DLL。
<CustomAction Id='LaunchXLAReg' FileKey='RegisterXLAs' ExeCommand="" Execute='commit' Return='asyncNoWait' />
<InstallExecuteSequence>
<Custom Action="LaunchXLAReg" Before="InstallFinalize">NOT Installed</Custom>
<Custom Action="LaunchXLAUnReg" Before="InstallFinalize">Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
</InstallExecuteSequence>
但是当我从 Visual Basic 中打印出路径环境变量时,我的更改不存在,因此 VB 失败了。
然后我尝试使用 Visual Basic 设置路径 env 变量,但这次在安装过程结束时未在我的系统上设置该变量。
这是在 windows 8.1 上,它曾经在 windows 7 上工作 编辑:添加了 InstallExecuteSequence 块,添加了对哪个程序产生错误的说明。
【问题讨论】:
-
我已将其交叉发布到 wix 用户组
-
我会尝试在执行上下文中运行它。 (在 InstallFinalize 之前;执行 =“deferred”)。我的预感是您正在从 UI 的上下文中运行 ExeCommand。我猜 UI 的上下文具有启动 msi 时的环境变量的副本,并且由于“缓存”值而没有拾取您添加的路径变量。如果您在 ExecuteSequence 的上下文中运行,它应该会看到您设置的环境变量。有点像如果你打开两个 cmd 提示并在其中设置一个 env var 然后尝试在另一个中访问它,直到你打开一个新的提示才会出现。
-
@BrianSutherland 你的意思是像我刚刚添加的 InstallExecute 块吗?
-
是的,类似的。您必须将 CustomAction 定义中的 Execute 更新为“延迟”,看看是否有效。
标签: excel wix windows-installer vba