【问题标题】:How to uninstall a non-msi InstallShield setup in Wix toolset如何在 Wix 工具集中卸载非 msi InstallShield 设置
【发布时间】:2017-10-26 14:37:12
【问题描述】:

我有一个使用 InstallShield 2015 制作的旧安装程序,它不基于 MSI(我尝试使用 7zip 打开它,但无法 --> 基于非 MSI,对吗?)。 一般来说,我需要停止使用 InstallShield 并迁移到 Wix。

  1. 是否有可能将 InstallShield 转换为 Wix?
  2. 使用 Wix,我需要检测当前是否安装了以前的版本(InstallShield 版本)并自动卸载它,然后继续正常的 Wix 进程。这样的事情可能吗?

谢谢你:-)

【问题讨论】:

  • 安装程序,是一个 EXE 还是你在谈论一个 .ism InstallShield 项目文件?我不认为使用 7-zip 来评估这是否是一个 msi 是可行的。我会尝试使用命令行来查看是否可以从 EXE 中提取包。尝试使用 \a 标志运行您的设置,看看它是否为您提取了包。
  • 另一个检查这个应用程序是否已经安装在测试系统上的事情,在注册表中查找卸载键。这应该告诉您它是否是 MSI 安装。如果是 64 位安装,请检查 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall 或 64 位注册表项。
  • 如果它是一个可执行文件,它仍然可能是一个包含 MSI 文件的 exe。这就是您应该验证的内容,因为如果它真的是基于 MSI 的,那么您可以进行重大升级。该卸载键可能包含一个卸载字符串和一个 guid,这表明它是一个 MSI 安装。
  • 要提取各种 InstallShield 构建的引导程序,请参阅 Programmatically extract contents of InstallShield setup.exe。根据安装程序的类型,您将其包含在 WiX 中的选项会有所不同。
  • @DanielLee 它是一个 .ism 项目文件,它创建一个名为 BTSetup.exe 的 exe 文件。使用\a 我得到了这个:The setup command line is invalid. The setup cannot proceed.。我设法提取了一个 MSI 文件,有点。我这样做了:BTSetup.exe /silent /stage_only ISRootStagePath="c:\bbb",然后提取了一个名为 setup.exe 的文件,然后我这样做了:setup.exe /s /x /b"c:\ccc" /v"/qn",这产生了一个名为 foobar.msi 的 MSI 文件。我从中提取了 UpgradeCode 以在 Wix 中执行MajorUpgrade,但它不起作用。此外,此 UpgradeCode 与 .ism 文件中的不同。

标签: wix


【解决方案1】:

我将添加一个快速答案以供参考,尽管问题似乎已经解决。

  1. 如果旧的 Installshield 安装程序是 MSI,您可以使用 WiX 工具包中的 dark.exe 将 MSI “反汇编”为 WiX 源代码(dark.exe 也可以反编译 WiX setup.exe捆绑包 - 这里有一个有点混乱的描述:How can I compare the content of two (or more) MSI files?)。

    • 经过一些清理后,您可以将 WiX 源代码编译为新的 WiX 构建的 MSI。清理成功需要一些知识和经验(消除 GUI 部分、添加 WiX GUI、重新对齐源路径、清理二进制流表等...... - 不是微不足道的,但不是火箭科学:-)。

    • 如果旧安装程序是旧版安装程序(不是 MSI),您可以通过使用重新打包工具捕获安装期间对系统所做的更改并将其转换为 MSI 将其转换为 MSI。清理此类捕获需要大量知识。如果您了解产品,通常最好“手动”编写新设置。或者,如果您在一家大公司工作,您可能会在某个地方拥有一支“重新包装团队”,他们将拥有为您完成这项工作的专业知识。

  2. 是的,旧设置可以作为新 MSI 的一部分卸载

    • 正如您发现的那样,如果旧设置是 MSI,您可以在新的 WiX 安装过程中简单地使用主要升级将其删除。

    • 如果旧版本是旧版安装程序,事情可能会变得相当复杂,通常需要您“记录”一个对话响应文件以提供给旧 setup.exe 文件的卸载程序功能。一点都不简单,而且很容易出错。顺便说一句,MSI 的主要优点之一是完全可抑制的 GUI。

    • 作为参考,这里有一个旧答案,其中包含有关处理我们经常需要卸载和升级的臭名昭著的 setup.exe 文件的信息: How can I use powershell to run through an installer? setup.exe 可以是许多不同的东西:Installshield 安装程序、高级安装程序安装程序、Inno 安装程序、自解压 Zip-Archive、专有安装程序格式,不胜枚举……

【讨论】:

    猜你喜欢
    • 2014-02-20
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多