我正在努力的Wix设置询问用户是否从桌面上的主程序安装shorcut。
问题是在升级过程中,快捷方式会被删除,然后重新创建:
有没有一种简单的方法可以正确处理这种情况?
以下是关于我的wix设置的信息:
按机器安装
用户选择通过在“选择目标”的修改版本上添加的复选框来安装桌面快捷方式:
<Control Id="DesktopShortcutCheckBox" Type="CheckBox" X="20" Y="160" Width="290" Height="17" Property="INSTALLDESKTOPSHORTCUT" CheckBoxValue="[INSTALLDESKTOPSHORTCUT]" Text="!(loc.InstallDirDlgCreateDesktopShortcut)" />
在UI标签中,我初始化了属性:
<Property Id="INSTALLDESKTOPSHORTCUT" Value="1"/>
这是使用INSTALLDESKTOPSHORTCUT条件创建快捷方式的组件:
<Directory Id="DesktopFolder" Name="Desktop">
<Component Id="desktopconnecteurdts" Guid="a-real-guid-here">
<Condition>INSTALLDESKTOPSHORTCUT=1</Condition>
<Shortcut Id="desktopconnecteurdts" Name="DTS eXplorer" WorkingDirectory="ApplicationFolder" Icon="DTSeXplorer.exe" Target="[ApplicationFolder]\DTSeXplorer.exe" Advertise="no" />
</Component>
</Directory>
启动后,安装程序将检查是否存在旧版本,如果找到则删除旧版本:
<Upgrade Id="$(var.UpgradeCode)">
<UpgradeVersion OnlyDetect="no"
Property="PREVIOUSVERSIONSINSTALLED"
Minimum="$(var.OldProductVersion)"
IncludeMinimum="yes"
Maximum="$(var.ProductVersion)"
IncludeMaximum="no"
RemoveFeatures="all" />
<UpgradeVersion OnlyDetect="yes" Property="PROJECT_DOWNGRADE"
Minimum="$(var.ProductVersion)" IncludeMinimum="no" />
</Upgrade>
产品版本major不会改变,例如我从1.6.8.12345升级到1.7.2.56789
谢谢!
答案 0 :(得分:1)
在安装期间将INSTALLDESKTOPSHORTCUT的值写入注册表。每当安装程序启动时,您都可以阅读注册表,如果该密钥存在,请将其设置为该属性的默认值。
不确定您是否可以对桌面上的快捷方式位置执行任何操作。
答案 1 :(得分:0)
您只能使用wix保存和恢复快捷方式的设置。
您的财产必须如此。
<Property Id="INSTALLDESKTOPSHORTCUT" Value="1" Secure="yes">
<RegistrySearch Id="Reg64" Root="HKLM" Win64="yes" Key="Software\$(var.ProductCompany)" Name="CreateDesktopShortcut" Type="raw"></RegistrySearch>
<RegistrySearch Id="Reg32" Root="HKLM" Win64="no" Key="Software\$(var.ProductCompany)" Name="CreateDesktopShortcut" Type="raw"></RegistrySearch>
</Property>
两个'RegistrySearch'只能覆盖32位和64位安装程序,如果你只使用32位,你可以删除其中一个。
在根文件夹下添加此内容。
<Component Permanent="yes" Id="RegistryEntries" Guid="YOUR_GUID">
<RegistryKey Root="HKLM" Key="Software\$(var.ProductCompany)" Action="create">
<RegistryValue Type="integer" Name="CreateDesktopShortcut" Value="[INSTALLDESKTOPSHORTCUT]" />
</RegistryKey>
</Component>