WIX安装程序根目录和版本控制
我已经为我的应用程序创建了一个使用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安装项目时,它会生成一个带有一些占位符的模板。建议开始修改此模板。例如,目录结构: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。
<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或更低,则应用程序将顺利安装。我已经浏览了教程和各种博客,但找不到太多帮助。