Wix - 在安装之前运行批处理脚本(用于删除以前的安装)?

时间:2012-05-31 15:35:55

标签: wix wix3.5

我所拥有的:

  1. 通过msi-package(在services.msc中列出)
  2. 推出服务的目的
  3. 该服务正在使用自定义dll
  4. 带有自定义操作的InstallExecuteSequence
    • <... After="InstallFinalize">NOT Installed</Custom>进行安装
    • <... Before="InstallInitialize">Installed</Custom>进行卸载
  5. 到目前为止,该服务是在没有msi-package的情况下手动安装在工作站上的 并且未注册为应用程序(因此未在appwiz.cpl中显示)
  6. 出了什么问题:

    • 如果服务(来自之前的安装)正在运行,我不知道如何在复制文件之前停止它(当然,更新dll的基本要求是没有任务正在使用它们)
    • 即使服务(来自先前的安装)没有运行,也没有文件得到更新

    所以我想要的是:

    • 我只是想用我的全新msi-package覆盖现有的安装,包括更新的dll和所有这些东西

    解决方案是什么:

    是的,希望它很快站在我的文字下面:)也许标题不是很好,那是因为我不知道如何更进一步......

2 个答案:

答案 0 :(得分:1)

支持你离开角落的最简单方法是编写一个使用ServiceInstall和ServiceControl元素的安装程序(使用Both值删除属性)来定义服务。将文件定位到之前未使用的新目录,以便您的引用计数不会全部搞砸。使用RemoveFile元素删除文件的旧安装以便进行测量。目标是能够升级删除折叠文件并卸载所有内容。

如果旧文件未一致地部署到同一目录,则您必须提供已知目录列表并编写重复的RemoveFile语句或编写搜索文件并删除它们的自定义操作。 (次优)

答案 1 :(得分:0)

ServiceControl元素:很酷,但我遇到了类似的问题:如果先前(手动)安装的服务在运行msi-package时仍在运行,弹出窗口会询问该怎么做(停止服务,取消,...)。

我最终将卸载以前版本的问题从新安装例程中分离出来。我简单地写了一个批处理skript,它运行在msi-package之前运行。