在不干扰用户桌面图标的情况下进行wix升级的模式
我正在使用的Wix安装程序会询问用户是否要从桌面上的主程序安装shorcut 问题是在升级过程中,快捷方式被删除,然后重新创建:在不干扰用户桌面图标的情况下进行wix升级的模式,wix,upgrade,shortcut,desktop-shortcut,Wix,Upgrade,Shortcut,Desktop Shortcut,我正在使用的Wix安装程序会询问用户是否要从桌面上的主程序安装shorcut 问题是在升级过程中,快捷方式被删除,然后重新创建: 如果用户移动了图标,它可能会在其他地方重新创建(从左上角开始的下一个可用空间) 如果用户选择在初始安装期间不创建图标,则使用UI的升级不记得默认情况下创建图标的复选框应为“未选中”,而静默升级只创建图标,尽管用户明确选择不创建此图标 有没有一种简单的方法可以正确处理这种情况? 以下是有关我的wix设置的信息: 安装是每台机器 用户通过“选择目标”的修改版本上添加的
- 如果用户移动了图标,它可能会在其他地方重新创建(从左上角开始的下一个可用空间)
- 如果用户选择在初始安装期间不创建图标,则使用UI的升级不记得默认情况下创建图标的复选框应为“未选中”,而静默升级只创建图标,尽管用户明确选择不创建此图标
在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>
INSTALLDESKTOPSHORTCUT=1
启动后,安装程序将检查是否存在旧版本,如果发现,则删除旧版本:
<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>
产品版本主要没有更改,例如,我正在从1.6.8.12345升级到1.7.2.56789
谢谢 在安装期间将INSTALLDESKTOPSHORTCUT的值写入注册表。无论何时启动安装程序,都可以读取注册表,如果该注册表项存在,则将其设置为该属性的默认值
但是,不确定您是否可以对桌面上的快捷方式位置进行任何操作。您可以仅使用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>
我就是这么想的,我正在寻找更简单的方法(可能是内置的)…对快捷方式位置无能为力,但通过注册表路径来记住复选框状态。我建议阅读以下内容,它提供了一个涵盖所有情况的解决方案:您找到桌面快捷方式的解决方案了吗?@Andreas:位置:否,每次更新都会重置
<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>