Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WIX安装程序根目录和版本控制_Wix - Fatal编程技术网

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

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

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

首先,我认为你应该从以下几点开始你的WiX之旅。它包含了你第一件事要面对的最基本问题的答案。您还应该意识到,理解WiX意味着首先要理解Windows Installer的概念,否则某些要点对您来说似乎是一种奇怪的魔法

在VisualStudio中创建新的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:(实际上,在ProgramFiles文件夹下)

…您必须安装更新版本的Windows Installer服务

基本上,它意味着它所说的-您机器上的Windows Installer版本低于您的软件包中所需的版本。如果您试图通过此更改解决上述问题,则与Windows Installer版本无关。只有在要使用Windows Installer的新功能时,您才需要比默认指定的版本更高的版本


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

首先,我认为你应该从以下几点开始你的WiX之旅。它包含了你第一件事要面对的最基本问题的答案。您还应该意识到,理解WiX意味着首先要理解Windows Installer的概念,否则某些要点对您来说似乎是一种奇怪的魔法

在VisualStudio中创建新的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:(实际上,在ProgramFiles文件夹下)

…您必须安装更新版本的Windows Installer服务

基本上,它意味着它所说的-您机器上的Windows Installer版本低于您的软件包中所需的版本。如果您试图通过此更改解决上述问题,则与Windows Installer版本无关。只有在要使用Windows Installer的新功能时,您才需要比默认指定的版本更高的版本


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

您的版本存在的问题是,当您更改产品版本时,您正在更改版本

<Package
    Id='*' 
    InstallerVersion='406'
    Compressed='yes'
    Description="Installer Number 406" />
虽然您的描述属性很好,但我会发现以下内容更有意义:

    Description="My Product v4.0.6 Installer"

您的版本存在的问题是,当您更改产品版本时,您正在更改版本

<Package
    Id='*' 
    InstallerVersion='406'
    Compressed='yes'
    Description="Installer Number 406" />
虽然您的描述属性很好,但我会发现以下内容更有意义:

    Description="My Product v4.0.6 Installer"

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

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


模板取自。将
INSTALLLOCATION
设置到所需的文件夹
C:\MyApps
,这应该可以做到这一点。

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

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

模板取自。将
INSTALLLOCATION
设置到所需的文件夹
C:\MyApps
,这样应该可以完成任务。

尝试以下操作:

<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>

我想这应该管用

试试这个:

<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>


我想这应该管用

实际上,客户端要求在c:\MyApps目录下安装,而不是在程序文件下安装,而且安装程序必须是静默安装程序,因此无需用户输入,我可以设置安装目录位置。我希望避免强制所有用户更新其Windows installer软件包。其他所有功能都相同,但将版本号更改为4.0.6或更高版本需要更新版本的安装程序包。如果am提供的版本号为4.0.5或更低,则应用程序将顺利安装。我已经浏览了教程和各种博客,但找不到太多帮助。