【问题标题】:Wix setup - How to define uninstallWix 设置 - 如何定义卸载
【发布时间】:2016-08-30 07:24:28
【问题描述】:

我已经为我的 C# 项目创建了我的第一个 Wix 设置(我是 wix 的初学者)。

安装程序创建一个msi文件,这个文件很好用。设置完成后,所有 DLL 和 .exe 都在“C:\Program Files (x86)\MyApplication”中创建

但是当我右键单击 msi 并选择卸载时,会显示卸载菜单而没有错误,但文件夹“C:\Program Files (x86)\MyApplication”没有被删除。

我如何定义卸载功能来删除这个文件夹?

我的Product.wxs中有一部分

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Product Id="*"
           Name="My Application"
           Language="1033"
           Version="1.0.0.0"
           Manufacturer="Me"
           UpgradeCode="36944ae1-9e9f-4ef0-a860-9d894e0c28ef">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine"/>
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed."/>
    <Media Id="1" Cabinet="myApplication.cab" EmbedCab="yes"/>

    <Feature Id="ProductFeature" Title="My Application" Level="1">
      <ComponentGroupRef Id="ProductComponents"/>
      <ComponentRef Id ="ApplicationShortcut"/>
      <ComponentRef Id ="ApplicationShortcutDesk"/>
      <ComponentRef Id ="RemoveAll"/>
    </Feature>
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramMenuFolder">
        <Directory Id="ApplicationProgramsFolder" Name="My Application"/>
      </Directory>
      <Directory Id="DesktopFolder" SourceName="Desktop"/>
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="My Application">
          <Directory Id="fr" Name="fr"/>

          <Component Id="RemoveAll" Guid="{63F6943C-7707-41CA-BAB9-7438471EC81E}">
            <RemoveFile Id="RemoveAllFilesOnUninstall" Directory="INSTALLFOLDER" Name ="*.*" On ="uninstall"/>
            <RemoveFolder Id="RemoveAllFoldersOnUninstall" Directory="INSTALLFOLDER" On="uninstall"/>
            <RegistryValue Root="HKLM" Key="Software\Microsoft\MyApplication" Name="Path" Type="string" Value="[INSTALLFOLDER]" KeyPath="yes" />
            <util:RemoveFolderEx On="uninstall" Property="INSTALLFOLDER" />
          </Component>
        </Directory>
      </Directory>
    </Directory>
  </Fragment>

  <Fragment>
    <DirectoryRef Id="ApplicationProgramsFolder">
      <Component Id="ApplicationShortcut" Guid="{3B0B5064-807C-4E29-A701-E77BE8B8FA86}">
        <Shortcut Id="ApplicationStartMenuShortcut"
                  Name="My Application"
                  Target="[#MyApplication.exe]"
                  WorkingDirectory="INSTALLFOLDER"/>
        <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
        <RegistryValue Root="HKCU" Key="Software\Microsoft\MyApplication" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
      </Component>
    </DirectoryRef>
    <DirectoryRef Id="DesktopFolder">
      <Component Id="ApplicationShortcutDesk" Guid="{61087C99-9CA8-4191-8251-219DFDAFC666}">
        <Shortcut Id="ApplicationStartDeskShortcut"
                  Name="My Application"
                  Target="[#MyApplication.exe]"
                  WorkingDirectory="INSTALLFOLDER"/>
        <RemoveFolder Id="DesktopFolder" On="uninstall"/>
        <RegistryValue Root="HKCU" Key="Software\Microsoft\MyApplication" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
      </Component>
    </DirectoryRef>
  </Fragment>

  <Fragment>
    <ComponentGroup Id="ProductComponents">
      <Component Id="ProductComponent" Guid="{5C62E31A-C787-4B45-A4F7-2324A12C72D1}" Directory="INSTALLFOLDER">
        <!-- List of DLL/EXE -->
    </ComponentGroup>
  </Fragment>
</Wix>

编辑:我现在使用的是UtilExtensionINSTALLFOLDER 现在已被正确删除。唯一重命名的元素是ApplicationShortcutDeskApplicationStartMenuShortcutRemoveFolder如何作为快捷方式工作?

【问题讨论】:

  • 为什么要为此目的使用自定义操作?当您卸载产品时,安装程​​序会删除它自己创建的所有文件。这是默认行为。也许您不小心在“文件”标签中使用了“永久”属性?
  • 另外,我建议您在卸载过程中生成日志。这对于问题检测非常有帮助。为此,照常安装您的 msi,然后运行 ​​msiexec /x msiname.msi /l*v uninstall.log 进行卸载。
  • 我尝试不使用自定义操作,没有删除任何内容,并且我没有带有文件标签的 Permanent 属性。我的文件标签都是这样的&lt;File Id="logo.JPG" Source="$(var.MyApplication.ProjectDir)\logo.JPG"/&gt;(我在我的问题中添加了一个日志)
  • 从您的安装程序中删除自定义操作。它可能会导致更难找出主要原因的侧面错误。还请附上整个日志文件。这将有助于找出您的文件在卸载过程中没有以标准方式删除的原因。
  • 我再说一遍。情况,当安装程序在卸载过程中不删除它自己创建的文件时,这是不正常的。也许您可能会发现这种行为的原因......

标签: c# wix


【解决方案1】:

感谢Anton Sutamin,我终于找到了问题所在。

我的 GUID 阻止了删除(参见 that post

使用新的 GUID,一切正常,无需 CustomAction/RemoveFile/etc...

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 2017-11-29
    • 2015-01-25
    • 1970-01-01
    • 2013-03-08
    相关资源
    最近更新 更多