卸载后桌面图标不会被删除 - Wix
Desktop icon wont get removed after uninstall - Wix
我有这个 Wix XML 脚本来安装我的服务和桌面上的快捷方式图标。安装完美,卸载程序也可以,但它在桌面上留下了快捷方式图标。我不知道出了什么问题,我使用了 Wix 文档中指定的 On="uninstall"
参数,
这里是 XML:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product Id="*" Name="Administration Service" Language="1033" Version="1.3.0.0" Manufacturer="company" UpgradeCode="PUT-GUID-HERE>
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Platform="x64"/>
<Icon Id="shortcut_s.url" SourceFile="./../ReviewerBootstrapper/reviewer.ico"/>
<Property Id="ARPPRODUCTION" Value="shortcut_s.url"/>
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<Media Id="1" Cabinet="cab1.cab" EmbedCab="yes" />
<Feature Id="ProductFeature" Title="AdministrationServiceInstallation" Level="1">
<ComponentGroupRef Id="ProductComponents" />
<ComponentGroupRef Id="AdministrationServiceComponents" />
<ComponentRef Id="ApplicationShortcut" />
<ComponentRef Id="ApplicationShortcutDesktop"/>
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFiles64Folder">
<Directory Id="Company" Name="Eurotherm">
<Directory Id="App" Name="Reviewer">
<Directory Id="INSTALLFOLDER" Name="AdministrationService" >
</Directory>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="Eurotherm Reviewer" />
</Directory>
<Directory Id="DesktopFolder" Name="Desktop" />
</Directory>
</Fragment>
<Fragment>
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="ApplicationShortcut" Guid="*" Win64="yes">
<Shortcut Id="ApplicationStartMenuShortcut"
Name="Reviewer Services"
Target="[INSTALLFOLDER]shortcut_s.url"
WorkingDirectory="APPLICATIONROOTDIRECTORY"
Icon="shortcut_s.url" />
<RemoveFolder Id="CleanUpShortCut" Directory="ApplicationProgramsFolder" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\Microsoft\Reviewer" Name="installed" Type="integer" Value="1"
KeyPath="yes" />
</Component>
</DirectoryRef>
<DirectoryRef Id="DesktopFolder">
<Component Id="ApplicationShortcutDesktop" Guid="*" Win64="yes">
<Shortcut Id="DesktopShortcut"
Name="Services Reviewer"
Target="[INSTALLFOLDER]shortcut_s.url"
WorkingDirectory="APPLICATIONROOTDIRECTORY"
Icon="shortcut_s.url" />
<RemoveFolder Id="RemoveDesktopShortCut" Directory="DesktopFolder" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\Microsoft\Reviewer" Name="installed" Type="integer" Value="1"
KeyPath="yes" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="WebShortcut" Guid="" Win64="yes">
<File Id="web_shortcut_id" Name="shortcut_s.url" Source="shortcut_s.url"/>
</Component>
<Component Id="removeAll" Guid="*" Win64="yes">
<CreateFolder />
<util:RemoveFolderEx Id="RemoveAdministrationServicesFolder" On="uninstall" Property="INSTALLFOLDER" />
</Component>
<Component Id="ReviewerServices.web.exe" Guid="*" Win64="yes">
<File Id="ReviewerServices.web.exe" KeyPath="yes" Source="$(var.publishDir)\ReviewerServices.web.exe" />
<ServiceInstall Id="AdministrationServiceInstaller"
Type="ownProcess"
Vital="yes"
Name="ReviewerServices.web"
DisplayName="Reviewer Administration Service"
Description="ReviewerAdministrationService"
Start="auto"
Account="LocalSystem"
ErrorControl="ignore"
Interactive="no" />
<ServiceControl Id="AdministrationStartService"
Start="install"
Stop="both"
Remove="uninstall"
Name="ReviewerServices.web"
Wait="yes" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>
您不使用 DirectoryRef 标记来指示目的地,而是在 Shortcut 标记的 Directory 值中指定它,如下所示。请注意,我删除了周围的 DirectoryRef 标记。
<Component Id="ApplicationShortcutDesktop" Guid="*" Win64="yes">
<Shortcut Id="DesktopShortcut"
Name="Services Reviewer"
Directory="DesktopFolder"
Target="[INSTALLFOLDER]shortcut_s.url"
WorkingDirectory="APPLICATIONROOTDIRECTORY"
Icon="shortcut_s.url" />
<RegistryValue Root="HKCU" Key="Software\Microsoft\Reviewer" Name="installed" Type="integer" Value="1"
KeyPath="yes" />
</Component>
您使用的 RemoveFolder 会指定在卸载时删除 Desktop 文件夹,这是不可能的。
我有这个 Wix XML 脚本来安装我的服务和桌面上的快捷方式图标。安装完美,卸载程序也可以,但它在桌面上留下了快捷方式图标。我不知道出了什么问题,我使用了 Wix 文档中指定的 On="uninstall"
参数,
这里是 XML:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product Id="*" Name="Administration Service" Language="1033" Version="1.3.0.0" Manufacturer="company" UpgradeCode="PUT-GUID-HERE>
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Platform="x64"/>
<Icon Id="shortcut_s.url" SourceFile="./../ReviewerBootstrapper/reviewer.ico"/>
<Property Id="ARPPRODUCTION" Value="shortcut_s.url"/>
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<Media Id="1" Cabinet="cab1.cab" EmbedCab="yes" />
<Feature Id="ProductFeature" Title="AdministrationServiceInstallation" Level="1">
<ComponentGroupRef Id="ProductComponents" />
<ComponentGroupRef Id="AdministrationServiceComponents" />
<ComponentRef Id="ApplicationShortcut" />
<ComponentRef Id="ApplicationShortcutDesktop"/>
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFiles64Folder">
<Directory Id="Company" Name="Eurotherm">
<Directory Id="App" Name="Reviewer">
<Directory Id="INSTALLFOLDER" Name="AdministrationService" >
</Directory>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="Eurotherm Reviewer" />
</Directory>
<Directory Id="DesktopFolder" Name="Desktop" />
</Directory>
</Fragment>
<Fragment>
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="ApplicationShortcut" Guid="*" Win64="yes">
<Shortcut Id="ApplicationStartMenuShortcut"
Name="Reviewer Services"
Target="[INSTALLFOLDER]shortcut_s.url"
WorkingDirectory="APPLICATIONROOTDIRECTORY"
Icon="shortcut_s.url" />
<RemoveFolder Id="CleanUpShortCut" Directory="ApplicationProgramsFolder" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\Microsoft\Reviewer" Name="installed" Type="integer" Value="1"
KeyPath="yes" />
</Component>
</DirectoryRef>
<DirectoryRef Id="DesktopFolder">
<Component Id="ApplicationShortcutDesktop" Guid="*" Win64="yes">
<Shortcut Id="DesktopShortcut"
Name="Services Reviewer"
Target="[INSTALLFOLDER]shortcut_s.url"
WorkingDirectory="APPLICATIONROOTDIRECTORY"
Icon="shortcut_s.url" />
<RemoveFolder Id="RemoveDesktopShortCut" Directory="DesktopFolder" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\Microsoft\Reviewer" Name="installed" Type="integer" Value="1"
KeyPath="yes" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="WebShortcut" Guid="" Win64="yes">
<File Id="web_shortcut_id" Name="shortcut_s.url" Source="shortcut_s.url"/>
</Component>
<Component Id="removeAll" Guid="*" Win64="yes">
<CreateFolder />
<util:RemoveFolderEx Id="RemoveAdministrationServicesFolder" On="uninstall" Property="INSTALLFOLDER" />
</Component>
<Component Id="ReviewerServices.web.exe" Guid="*" Win64="yes">
<File Id="ReviewerServices.web.exe" KeyPath="yes" Source="$(var.publishDir)\ReviewerServices.web.exe" />
<ServiceInstall Id="AdministrationServiceInstaller"
Type="ownProcess"
Vital="yes"
Name="ReviewerServices.web"
DisplayName="Reviewer Administration Service"
Description="ReviewerAdministrationService"
Start="auto"
Account="LocalSystem"
ErrorControl="ignore"
Interactive="no" />
<ServiceControl Id="AdministrationStartService"
Start="install"
Stop="both"
Remove="uninstall"
Name="ReviewerServices.web"
Wait="yes" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>
您不使用 DirectoryRef 标记来指示目的地,而是在 Shortcut 标记的 Directory 值中指定它,如下所示。请注意,我删除了周围的 DirectoryRef 标记。
<Component Id="ApplicationShortcutDesktop" Guid="*" Win64="yes">
<Shortcut Id="DesktopShortcut"
Name="Services Reviewer"
Directory="DesktopFolder"
Target="[INSTALLFOLDER]shortcut_s.url"
WorkingDirectory="APPLICATIONROOTDIRECTORY"
Icon="shortcut_s.url" />
<RegistryValue Root="HKCU" Key="Software\Microsoft\Reviewer" Name="installed" Type="integer" Value="1"
KeyPath="yes" />
</Component>
您使用的 RemoveFolder 会指定在卸载时删除 Desktop 文件夹,这是不可能的。