Wix卸载快捷方式无法正常工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wix卸载快捷方式无法正常工作相关的知识,希望对你有一定的参考价值。

我正在尝试为我的应用程序创建一个卸载快捷方式,我正在使用此链接中的确切标记:

http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/create_uninstall_shortcut.html

它在程序菜单文件夹下的应用程序目录中创建快捷方式。

问题是,在单击卸载快捷方式时,我收到以下错误消息:“无法打开此安装包。验证包是否存在以及您是否可以访问它,或联系应用程序供应商以验证这是否有效Windows Installer程序包“

以下是我在.wxs文件中的内容

    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="APPLICATIONROOTDIRECTORY" Name="MyApplication"/>
        </Directory>
        <Directory Id="ProgramMenuFolder">
            <Directory Id="ApplicationProgramsFolder" Name="MyApplication"/>
        </Directory>
    </Directory>

    <DirectoryRef Id="APPLICATIONROOTDIRECTORY">
        <Component Id="myapplication.exe" Guid="xxxxxxxx-1BF3-4394-ABE4-CABB29D6454C">
            <File Id="myapplication.exe" Source="myapplication.exe" KeyPath="yes" Checksum="yes"/>
        </Component>
        <Component Id="documentation.html" Guid="xxxxxxxx-44F3-4E6C-87B9-903CF17EF002">
            <File Id="documentation.html" Source="documentation.html" KeyPath="yes"/>
        </Component>
    </DirectoryRef>

    <DirectoryRef Id="ApplicationProgramsFolder">
        <Component Id="ApplicationShortcut" Guid="xxxxxxxx-F7C4-40D6-930C-3BD78143A0EF">
            <Shortcut Id="ApplicationStartMenuShortcut" 
                 Name="MyApplication" 
               Description="Uninstall Test"
                Target="[#myapplication.exe]"
                      WorkingDirectory="APPLICATIONROOTDIRECTORY"/>
            <!-- Step 1: Add the uninstall shortcut to your installer package -->
            <Shortcut Id="UninstallProduct"             
                      Name="Uninstall My Application"
                      Description="Uninstalls My Application"
                      Target="[System64Folder]msiexec.exe"
                      Arguments="/x xxxxxxxx-1D27-4656-AB3F-41A2047CB6C0"/>
            <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
            <RegistryValue Root="HKCU" Key="SoftwareMicrosoftUninstallTest" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
       </Component>
    </DirectoryRef>

    <Feature Id="MainApplication" Title="Main Application" Level="1">
        <ComponentRef Id="myapplication.exe" />
        <ComponentRef Id="documentation.html" />
        <ComponentRef Id="ApplicationShortcut" />   
    </Feature>
</Product>

我还没有找到解决这个问题的方法。任何帮助,将不胜感激。谢谢

答案

将卸载快捷方式放在开始菜单中始终违反准则 - 至少从21世纪初开始,并且使用Windows 8中引入的新开始菜单磁贴确实非常不可取。请阅读以下文章:Desktop App Tiles on the Start Screen(做与不做)。

我没有系统可以测试,但是Windows 8 may actually hide uninstall shortcuts。你应该避免使用其他快捷方式(自述文件,网站快捷方式等)。我刚刚在Windows 10上测试过,我确实可以在开始菜单中看到卸载快捷方式。

在这种特殊情况下,我的建议实际上是消除您的自定义快捷方式并以此方式声明成功。对不起,如果这不适合你,但如果你不介意我这样说:不要打击基本的Windows设计 - 他们反击,你会一直后悔试图驯服他们。只是骑上野兽,让它撕裂:-)。

话虽如此,您可能在卸载快捷方式中与ProductCode不匹配,正如Chris Painter建议的那样。对于调试,您可以尝试更改:Arguments="/x xxxxxxxx-1D27-4656-AB3F-41A2047CB6C0"/>Arguments="/x [ProductCode]"/>所以它看起来像这样:

<Shortcut Id="UninstallProduct"             
           Name="Uninstall My Application"
           Description="Uninstalls My Application"
           Target="[System64Folder]msiexec.exe"
           Arguments="/x [ProductCode]"/>

记得卸载所有实例,重建然后安装新版本来测试所有这些。

我运行了一个快速测试,这适用于Windows 10.尽管我的意见,你仍然应该删除该快捷方式。有趣的是,在开始菜单中看不到在同一位置添加Internet快捷方式(在磁盘上创建文件)(这也可能表示在Windows 10中隐藏了快捷方式)。

以供参考:

另一答案

卸载将尝试打开并运行缓存的MSI文件的InstallExecuteSequence,通常是 Windows installer中的[hex string] .msi,如果找不到该文件:

  1. 验证缓存的MSI实际上是否存在且尚未删除(有些人清除该文件夹)。
  2. 如果您在安装软件包的位置有原始MSI,它也可能尝试从那里访问MSI,那么该软件包是否可用?
  3. 可能存在安全问题,因此请验证从快捷方式启动的msiexec进程是否有权访问缓存的MSI文件。一世

如果您可以从“程序和功能”中成功卸载,那么我怀疑卸载过程是使用无法访问缓存的MSI文件的用户帐户运行的。

以上是关于Wix卸载快捷方式无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

WIX安装项目未完全卸载应用程序

WiX“重大升级”不会在降级时完全安装应用程序

如何设置 Wix 引导程序安装的产品代码

在卸载期间显示来自 C# 自定义操作的 WiX 对话框

如何实现 WiX 安装程序升级?

在 WIX 中运行时为快捷方式动态分配名称