【问题标题】:wix path changes not appearing in an exec commandwix 路径更改未出现在 exec 命令中
【发布时间】: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


【解决方案1】:

在安装结束之前,Windows Installer 不会将环境变量刷新到系统中。在安装实际成功并且无法回滚之前将它们提交到系统是不明智的 - 我认为这是部分原因。此外,您作为服务的子进程运行,该服务在重新启动之前不会获取环境变量。

如果您的程序可以使用 SPIF_SENDCHANGE 设置执行 SystemParametersInfo 调用,它可能会起作用:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms724947(v=vs.85).aspx

这将广播此消息,但您的程序需要在此处处理更改消息:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms725497(v=vs.85).aspx

但是,如果您是从自己安装的程序目录运行 exe 并被延迟并且在安装文件之后,那么不清楚为什么它不起作用,因为 Dll 就在 exe 旁边,对吗?这意味着如果您在自定义操作中指定一个目录(应该是类型 34 或 35),那么这将是工作目录。在这一点上,WiX 文档(对我来说)似乎不太清楚,但自定义操作文档清楚地表明您可以指定一个目录作为可执行文件的工作目录:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa372048(v=vs.85).aspx

请参阅类型 34 和 35。另请参阅有关使用 Directory 属性的 WiX 文档:

http://wixtoolset.org/documentation/manual/v3/xsd/wix/customaction.html

换句话说,我认为如果您在自定义操作规范中使用 [INSTALLDIR] 目录,这一切都可以正常工作。

【讨论】:

  • 正如我改变我原来的帖子所说的那样,缺少 DLL 的是 Excel,而不是我的 VB 程序。我的VB程序调用excel来注册其他VBA脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多