WIX安装程序根目录和版本控制



我为我的应用程序创建了一个使用WIX的静默安装程序。我希望它将我的应用程序安装到C:\MyApps文件夹中,但其目录Id='TARGETDIR'Name='SourceDir'标记随机选择C或D驱动器。我只想强制安装到C驱动器。此外,如果我提供的版本号大于4.0.5,我在安装过程中收到一个错误,说"Windows安装程序服务无法安装此安装包。您必须安装Windows安装程序的更新版本。"我使用的是Windows XP专业SP3 2002版。

首先,我认为您应该从这里提供的教程开始您的WiX之旅。它包含了你第一件事将要面对的大多数基本问题的答案。你还应该意识到,理解WiX意味着首先了解Windows安装程序的概念——否则,有些要点对你来说会是一种奇怪的魔法。

当您在Visual Studio中创建一个新的WiX安装项目时,它会生成一个带有一些占位符的模板。建议开始修改此模板。例如,目录结构:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder">
    <Directory Id="INSTALLLOCATION" Name="SetupProject1">
      <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
      <!-- <Component Id="ProductComponent" Guid="ba7d579f-5234-4448-b880-109f589d58e5"> -->
      <!-- TODO: Insert files, registry keys, and other resources here. -->
      <!-- </Component> -->
    </Directory>
  </Directory>
</Directory>

此代码段定义ProgramFileFolder下的INSTALLLOCATION文件夹,这是一种比将其放在C:\root下更好的方法。您仍然可以通过在安装时修改INSTALLLOCATION属性来更改安装位置(例如,根据用户的输入)。

你的问题的快速答案是:

随机选择C或D驱动器。。。

这是意料之中的事——它会在安装时选择可用空间最大的驱动器。如果你坚持WiX模板默认定义的方式,它将属于C:(实际上,在Program Files文件夹下)。

您必须安装更新版本的Windows安装程序服务。。。

基本上,这就是它所说的——你机器上的Windows安装程序版本低于你软件包中所需的版本。如果您试图通过此更改来解决上述问题,那么它与Windows Installer版本无关。只有在使用Windows安装程序的新功能时,您才需要比默认情况下指定的版本更高的版本。

希望你能从这个简短的介绍中得出正确的结论-从教程开始。:-)

版本的问题是,当您更改产品版本时,您正在更改Windows安装程序的版本。

<Package
    Id='*' 
    InstallerVersion='406'
    Compressed='yes'
    Description="Installer Number 406" />

InstallerVersion属性应该是安装此程序包所需的Windows安装程序的最低版本。您已安装Windows Installer v4.5。当它设置为406时,它会查找Windows Installer v4.6,坦率地说,它并不存在。将其设置为301(版本3.1)通常就足够了。

    InstallerVersion='301'

虽然你的描述属性很好,但我会发现以下内容更有意义:

    Description="My Product v4.0.6 Installer"

试试这个:

<Fragment>
    <Property Id="_BrowseProperty" Value="INSTALLDIR" Secure="yes"/>
    <CustomAction Id="SetDataLocationDefault" Property="INSTALLDIR" Value="[WindowsVolume]$(var.Title)" />
    <InstallUISequence>
      <Custom Action="SetDataLocationDefault" After="CostFinalize" />
    </InstallUISequence>
    <InstallExecuteSequence>
      <Custom Action="SetDataLocationDefault" After="CostFinalize" />
    </InstallExecuteSequence>    
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="INSTALLDIR" Name="$(var.Title)">
     <!-- TODO: Insert your components here. -->
      </Directory>
    </Directory>
  </Fragment>

我认为这应该有效!

不要依赖TARGETDIR,而是使用自定义属性,如下所示:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="INSTALLLOCATION" Name="SetupProject1">
      <!-- TODO: Insert your components here. -->
  </Directory>
</Directory>

模板取自严的回答。将INSTALLLOCATION设置为所需的文件夹C:MyApps,这样就可以了。

最新更新