【问题标题】:MSI Build uninstall- Installed directory not removingMSI Build 卸载 - 安装目录未删除
【发布时间】:2018-08-17 19:48:51
【问题描述】:

我为我们的应用程序创建了 MSI 构建包。安装完成后,我们在 Installer 类的已提交事件中触发了另一个独立进程中的依赖驱动软件,如下所示,

Process.Start("驱动软件路径")

我们面临一个问题,安装目录(它是空的)文件夹在卸载时没有删除。其实和安装一样,我们通过覆盖installer类的Uninstall方法,在单独的进程中触发了依赖驱动软件的卸载。

任何人,请帮我解决这个问题?如何删除已安装的目录?

我无法更改安装过程,因为我们知道当另一个安装/卸载正在进行时我们无法处理另一个安装/卸载。

【问题讨论】:

  • 您可以发布安装日志吗?文件夹与哪个组件相关联,在日志中搜索它。它可能会提供有关为什么不删除它的线索。如果您正在寻找暴力修复,您可以在安装程序的末尾添加一个自定义操作,在 InstallFinalize 之后,这将删除该文件夹。
  • 这不是放置 CA 的正确位置。也可以尝试使用 RemoveFile 表,而不是诉诸自定义操作。不过,解决组件规则问题可能会解决问题。

标签: build msbuild installshield windows-installer


【解决方案1】:

您正在从您的 MSI 中运行非 MSI 驱动程序安装 EXE?对吗? 或者它是一个封装在 EXE 中的 MSI?

您有 Installshield Premier 吗?您可以使用 套件项目 并在 MSI 安装之前(或之后)通过引导程序安装 EXE 吗?老实说,我从未使用过此功能,但按顺序运行设置就是它的用途。众所周知,启动 EXE 文件的 MSI 文件中的嵌入式自定义操作是不可靠的。这是 - 在我看来 - 如果您也使用托管代码运行(我认为您是这样),尤其如此。

从长远来看,托管代码可能会产生更安全的自定义操作代码(基于CAS 的安全性),但目前它似乎会导致不必要的运行时依赖 - 特别是对于针对多样化的超大规模分发(全球分发) Windows 版本(Vista、7、8、10)。

有人告诉我需要一段时间才能习惯 Installshield 的套件功能,但也许它对您更好?您可以按顺序运行 EXE 文件、MSI 文件、补丁和 zip。我猜想定义一些卸载和升级行为以及大量测试。我很确定企业应用程序打包者会很高兴看到一个套件而不是 MSI,其中嵌入了许多奇怪的东西。

更新:编译套件 setup.exe 文件后,可以按照此处所述将其提取:Regarding silent installation using Setup.exe generated using Installshield 2013 (.issuite) project file


或者,您可以尝试提取 setup.exe 文件以安装驱动程序并将驱动程序作为常规 MSI 组件安装,然后运行 ​​DPinst.exe 以安装/卸载驱动程序(来自 DIFx 的工具)。也很笨重 - 尤其是当您需要包含卸载时。

您的驱动程序设置可能已经使用 DPInst.exe。我会检查您是否可以从 EXE 中提取 MSI 并使用它而不是 EXE 来包含在套件项目中。有关如何处理 setup.exe 文件(提取、运行时参数等)的一些提示:Extract MSI from EXE

WiX 在其扩展之一中具有Driver element,用于处理驱动程序安装。我从来没有机会测试它。

【讨论】:

    猜你喜欢
    • 2015-03-25
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2011-01-02
    • 1970-01-01
    • 2011-11-29
    • 2023-03-24
    相关资源
    最近更新 更多