我正在尝试为我的应用程序创建一个卸载快捷方式,我正在使用此链接的确切标记:
http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/create_uninstall_shortcut.html
它在菜单文件夹下的应用程序目录中创建了一个快捷方式。
问题是,在单击卸载快捷方式时,我会收到以下错误消息:"无法打开此安装软件包。验证包含的包含并可以访问它,或者与应用程序供应商联系以验证此问题是有效的Windows安装程序软件包"
以下是我在.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>
我还无法找到解决此问题的解决方案。任何帮助,将不胜感激。谢谢
在开始菜单中放置卸载快捷方式一直符合准则 - 至少自2000年代初以来,随着Windows 8中引入的新开始菜单瓷砖,这样做确实是非常不建议的。请阅读以下文章: desktop应用程序瓷砖(do and nonts)。
我没有可以进行测试的系统,但是Windows 8实际上可能隐藏了卸载快捷方式。您也应该避免其他快捷方式(读书文件,网站快捷方式等)。我刚刚在Windows 10上进行了测试,并且确实可以在开始菜单中看到一个卸载快捷方式。
在这种特殊情况下,我的建议实际上是消除您的自定义快捷方式并以这种方式声明成功。对不起,如果这对您不理想,但是如果您不介意我这么说:不要与基本的窗户设计进行战斗 - 他们反击,您总是会后悔试图驯服它们。只需将野兽扎在野兽上,然后将其撕裂: - )。
话虽如此,正如克里斯·画家(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上工作了。您仍然应该在我的Opinon中删除该快捷方式。有趣的是,在同一位置添加互联网快捷方式(在磁盘上创建文件)在开始菜单中不可见(这可能表明隐藏在Windows 10中的快捷方式)。
用于参考:
- 带有名称的快捷方式&quot&lt; lt;程序名称&gt;&quot未显示在Windows 8/8.1/10 中
一个卸载将尝试打开并运行缓存的MSI文件的issallexecutesequence,通常是 windows installer中的[hex string] .msi。因此,如果它找不到文件:
-
验证缓存的MSI实际上在那里并且尚未删除(有些人清除文件夹)。
-
如果您在安装包装的位置中具有原始MSI,也可能尝试从那里访问MSI,那么该软件包可用吗?
-
可能存在安全问题,因此请验证从快捷方式启动的MSIEXEC进程有权访问缓存的MSI文件。我
如果您可以成功从程序中卸载功能,那么我怀疑卸载过程正在使用无法访问缓存的MSI文件的用户帐户运行。