【问题标题】:Open an application's Uninstall Wizard for InstallAware为 InstallAware 打开应用程序的卸载向导
【发布时间】:2015-04-28 23:14:33
【问题描述】:

我的应用程序将安装另一个应用程序。这可以通过在我的程序中使用 ShellAPI 运行该应用程序的 setup.exe 轻松完成。

但是如果这个外部应用程序已经存在,我想先卸载它。我可以自己打开控制面板,找到应用程序,然后有一些“卸载”或“修复”菜单选项。单击任一将打开此应用程序的 InstallAware 向导。

我可以从我的应用程序中启动此向导吗?用户仍然需要单击并确认所有内容,但我正在尝试合并卸载和重新安装此外部应用程序的全新/较新版本所需的步骤。我找不到要运行的uninstall.exe 之类的东西。从控制面板链接执行什么来卸载应用程序?

【问题讨论】:

  • 使用任务管理器,我发现 InstallAware 的 application.exe 位于类似C:\ProgramData\{170EC0AA-F47B-478E-9124-108BF7C47E71} 的位置。如果我只是运行那个 EXE,卸载程序就会打开。这是如何确定和创造的?有多个具有这种 GUID 的文件夹。如何确定我需要哪一个?
  • 您可以从注册表中获取该信息:stackoverflow.com/questions/10122761/…
  • 有点取决于其他应用程序使用的设置技术。您需要在此基础上获得更多信息。如果安装的版本比您提供的版本更新怎么办。您的用户不会喜欢您卸载版本 N+1 并替换为版本 N。如果用户想要同时保留版本 N 和 N+1 怎么办。在您了解更多细节之前,我认为没有人可以给您详细的建议。
  • @DavidHeffernan 我将能够根据我提供的版本检查现有版本。这是有一定道理的。
  • @ikathegreat 这很难做到,除非你是安装者。除非您让安装程序执行此逻辑,否则您的检测将失败。

标签: delphi uninstallation installaware


【解决方案1】:

您可以在注册表项下找到已安装应用程序的列表

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

每个应用程序都有自己的子密钥,因此您必须找到正确的子密钥。然后将卸载信息存储在UninstallString 值下。

也有可能应用程序安装在HKEY_CURRENT_USER根密钥下。

但是,我不建议您自己执行卸载,除非您有特定的理由这样做。任何体面的安装程序都应该能够执行现有安装的升级,因此调用setup.exe 就足够了。

【讨论】:

  • 感谢您的洞察力。不幸的是,这些安装程序是特定于版本的,安装较新版本会使旧版本保留在 PC 和控制面板程序列表中,这就是我发布此问题的原因。
  • @ikathegreat 我觉得奇怪的是,您仅对 Dalijas 的最后一段发表评论就驳回了她的回答,而您问题的实际答案在第一段。 Uninstallstring 准确地告诉您如何启动卸载程序向导。在调用卸载程序之前,您可能需要检查 DisplayVersion。您需要遍历 Uninstall 配置单元中的节点以找到您正在寻找的应用程序(或它的所有版本),但这正是控制面板小程序正在做的事情。
  • 我明白为什么单独运行较新的设置不能解决您的问题。我略微修改了关于不要自己进行卸载的建议,但我决定将其作为答案的一部分,作为可能处于稍微不同情况的其他人的指南。无论如何,您的问题的解决方案在我的答案的第一部分。
猜你喜欢
  • 2012-04-06
  • 2013-07-02
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 2017-02-01
  • 1970-01-01
相关资源
最近更新 更多