在旧版Visual Studio部署项目安装程序中,传递指定TARGETDIR
值的命令行参数允许我覆盖默认安装位置(我的大多数安装都是在没有用户交互的情况下进行的,因此命令行自动化被大量使用)。但是,我得到的印象是WiX(默认情况下)使用TARGETDIR
来表示不同的东西。虽然我可以(并且将会)更新我们的命令行工具来更改参数名称,但仍然需要手动触摸我们现有的所有安装(非常重要的工作)。
有没有办法在不破坏任何内容的情况下指定TARGETDIR
来覆盖WiX包中的安装位置?
答案 0 :(得分:25)
在进行更多挖掘之后,看起来我以前的经验是VSDPROJ特有的行为(可能是InstallShield)的结果,而且WiX符合Windows Installer。
正如我在this link发现的那样,TARGETDIR
实际上应该代表具有最多可用空间的驱动器的根(假设有多个)。这就是为什么WiX项目的目录嵌套在Program Files等下面的原因.Visual Studio实际上会添加一个自定义操作,将该属性覆盖到完整的安装路径。
通过做两件事,我能够完成我想要的事情:
TARGETDIR
而不是INSTALLFOLDER
(WiX放在那里的默认目录)TARGETDIR
属性的值设置为安装路径,假设没有从命令行传入。{/ li>
醇>
为此,我在<Product>
标记下添加了此内容:
<CustomAction Id="SetTARGETDIR" Property="TARGETDIR"
Value="[ProgramFilesFolder][Manufacturer]\[ProductName]"
Execute="firstSequence" />
这是<InstallExecuteSequence>
标记内的内容:
<Custom Action="SetTARGETDIR" Before="CostFinalize">TARGETDIR=""</Custom>