WIX安装时如何获取MSI文件的实际存放路径?
解决WIX中MSI路径复制后不更新的问题
这个坑我之前踩过!你遇到的问题核心是对$(sys.SOURCEFILEPATH)的作用时机理解有误——它是编译阶段的预处理器变量,只会记录你编译WIX项目生成MSI时的输出路径,完全不会管你之后把MSI复制到了哪里。
想要获取当前正在执行的MSI的实际路径,得用Windows Installer的内置属性OriginalDatabase,它是运行时动态获取的,会准确返回当前安装包所在的真实路径(比如你复制后的D:\temp\sample.msi)。
举个实际使用的例子:
如果你想在WIX里把当前MSI路径存到自定义属性里,可以这么写:
<Property Id="ACTIVE_MSI_LOCATION" Value="[OriginalDatabase]" />
之后在自定义动作或者其他需要用到路径的地方,直接引用[ACTIVE_MSI_LOCATION]就能拿到实时的MSI路径了。
再总结下关键点:
$(sys.SOURCEFILEPATH):编译时固定,对应WIX项目输出MSI的原始路径OriginalDatabase:运行时动态,对应当前执行的MSI的实际位置
内容的提问来源于stack exchange,提问作者Bandi Rajasekhar




