在WiX中TARGETDIR和INSTALLDIR的用途是什么?

时间:2012-06-12 19:17:13

标签: wix

在旧版Visual Studio部署项目安装程序中,传递指定TARGETDIR值的命令行参数允许我覆盖默认安装位置(我的大多数安装都是在没有用户交互的情况下进行的,因此命令行自动化被大量使用)。但是,我得到的印象是WiX(默认情况下)使用TARGETDIR来表示不同的东西。虽然我可以(并且将会)更新我们的命令行工具来更改参数名称,但仍然需要手动触摸我们现有的所有安装(非常重要的工作)。

有没有办法在不破坏任何内容的情况下指定TARGETDIR来覆盖WiX包中的安装位置?

1 个答案:

答案 0 :(得分:25)

在进行更多挖掘之后,看起来我以前的经验是VSDPROJ特有的行为(可能是InstallShield)的结果,而且WiX符合Windows Installer。

正如我在this link发现的那样,TARGETDIR实际上应该代表具有最多可用空间的驱动器的根(假设有多个)。这就是为什么WiX项目的目录嵌套在Program Files等下面的原因.Visual Studio实际上会添加一个自定义操作,将该属性覆盖到完整的安装路径。

通过做两件事,我能够完成我想要的事情:

  1. 将我的所有组件和组件组更改为安装到TARGETDIR而不是INSTALLFOLDER(WiX放在那里的默认目录)
  2. 添加一个自定义操作,将TARGETDIR属性的值设置为安装路径,假设没有从命令行传入。{/ li>

    为此,我在<Product>标记下添加了此内容:

    <CustomAction Id="SetTARGETDIR" Property="TARGETDIR" 
                  Value="[ProgramFilesFolder][Manufacturer]\[ProductName]" 
                  Execute="firstSequence" />
    

    这是<InstallExecuteSequence>标记内的内容:

    <Custom Action="SetTARGETDIR" Before="CostFinalize">TARGETDIR=""</Custom>