Deployment 我已经为MyProgram制作了一个安装程序,但是它创建的卸载快捷方式留下了空文件夹

Deployment 我已经为MyProgram制作了一个安装程序,但是它创建的卸载快捷方式留下了空文件夹,deployment,windows-installer,setup-project,uninstallation,shortcut,Deployment,Windows Installer,Setup Project,Uninstallation,Shortcut,我已经使用Visual Studio安装程序(Visual Studio安装项目)为MyProgram创建了一个安装程序。它被称为“MyProgram Setup.msi”。它可以很好地安装程序,如果使用“添加/删除程序”控制面板卸载程序,则所有内容都会被删除 问题是我想在名为“卸载我的程序”的程序快捷方式下向“用户程序菜单”添加一个快捷方式。我尝试了3种不同的方法,并且在所有3种方法中如果使用该快捷方式卸载MyProgram,卸载将留下2个空文件夹(“…Program Files\MyComp

我已经使用Visual Studio安装程序(Visual Studio安装项目)为MyProgram创建了一个安装程序。它被称为“MyProgram Setup.msi”。它可以很好地安装程序,如果使用“添加/删除程序”控制面板卸载程序,则所有内容都会被删除

问题是我想在名为“卸载我的程序”的程序快捷方式下向“用户程序菜单”添加一个快捷方式。我尝试了3种不同的方法,并且在所有3种方法中如果使用该快捷方式卸载MyProgram,卸载将留下2个空文件夹(“…Program Files\MyCompany\”和“…Program Files\MyCompany\MyProgram\”)

以下是我尝试创建卸载程序快捷方式的3种方法:

1)批处理或脚本文件的快捷方式

卸载MyProgram.bat:

@ECHO OFF
msiexec /uninstall {MyGUID}
卸载MyProgram.vbs:

Dim objShell
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("START /B msiexec /uninstall {MyGUID}")
Set objShell = Nothing
2)使用Orca.exe编辑MSI文件

我通过本指南了解了如何做到这一点:

我将快捷方式条目添加到快捷方式表中。卸载成功,但使用此快捷方式时仍会留下2个空文件夹

3)从MyProgram.exe中的代码

我修改了MyProgram.exe,使用“/uninstall”命令行参数运行“msiexec.exe/uninstall{MyGUID}”并退出自身。与此解决方案类似:


这些尝试都没有创建可以卸载程序以及程序的基本文件夹的快捷方式。我不想切换到其他一些安装程序产品,如Inno Setup、NSIS或WiX。

如果出于任何原因手动运行
msiexec/x{MyGUID}
无法删除所有文件夹,那么这就是您的安装程序或您在应用程序中执行的操作的问题


有关使用WiX创建卸载快捷方式的更多信息,请查看详细信息。根据博客文章中显示的信息,您应该能够了解如何坚持现有技术,并在您提到的(2)方法上使用一些变体。

如果出于任何原因手动运行
msiexec/x{MyGUID}
无法删除所有文件夹,然后是您的设置或应用程序中正在执行的操作的问题


有关使用WiX创建卸载快捷方式的更多信息,请查看详细信息。根据博客文章中显示的信息,您应该能够了解如何坚持现有技术,并在您提到的(2)方法上使用一些变体。

这似乎是Visual Studio安装程序中的一个错误。我决定改用。它能够创建具有正确功能的卸载快捷方式。

这似乎是Visual Studio安装程序中的一个错误。我决定改用。它能够创建具有正确功能的卸载快捷方式。

我已经创建了一个全新的程序,以测试我的设置或程序是否存在问题。该程序是TestProgram.exe,它是一个Windows窗体应用程序,没有添加任何代码。安装程序是Setup1.msi。卸载快捷方式会导致应用程序文件夹中的uninstall.bat文件。您可以使用此快捷方式安装然后卸载,而无需运行TestProgram.exe。尽管如此,卸载快捷方式仍会留下两个空文件夹。uninstall.bat是否在软件包中?因此,它在卸载时使用,因此无法删除文件夹OK,这很有意义。但是如果我改用#2方法并编辑MSI以添加msiexec.exe的快捷方式,则包或程序文件夹中没有任何额外内容,卸载过程中唯一使用的是msiexec.exe。即使使用这种方法也不能解决问题。我已经创建了一个全新的程序来测试我的设置或程序是否存在问题。该程序是TestProgram.exe,它是一个Windows窗体应用程序,没有添加任何代码。安装程序是Setup1.msi。卸载快捷方式会导致应用程序文件夹中的uninstall.bat文件。您可以使用此快捷方式安装然后卸载,而无需运行TestProgram.exe。尽管如此,卸载快捷方式仍会留下两个空文件夹。uninstall.bat是否在软件包中?因此,它在卸载时使用,因此无法删除文件夹OK,这很有意义。但是如果我改用#2方法并编辑MSI以添加msiexec.exe的快捷方式,则包或程序文件夹中没有任何额外内容,卸载过程中唯一使用的是msiexec.exe。即使使用这种方法也不能解决问题。