卸载后桌面图标不会被删除 - Wix

时间:2017-08-15 13:19:18

标签: installation wix windows-installer wix3.5 wix3

我有这个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>

1 个答案:

答案 0 :(得分:2)

您可以在Shortcut标记的Directory值中指定它,而不是使用DirectoryRef标记来指示目标,如下所示。请注意,我删除了周围的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文件夹,这是不可能的。