我正在将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块,添加了关于哪个程序产生错误的说明。
答案 0 :(得分:0)
在安装结束之前,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.另请参阅有关使用“目录”属性的WiX文档:
http://wixtoolset.org/documentation/manual/v3/xsd/wix/customaction.html
换句话说,如果您在自定义操作规范中使用[INSTALLDIR]目录,我认为这一切都可能正常工作。