首页 > 解决方案 > Visual Studio 安装程序,在复制文件之前执行自定义操作

问题描述

我正在使用常规的 Visual Studio 安装项目来部署服务。在安装程序复制文件之前,我需要执行自定义操作。AFAIS 所有自定义操作(源自 Installer ...)都是在复制文件执行的(这很明显,因为它们需要以某种方式执行)。

实际的问题是,安装程序会自行检查哪些文件正在使用并在复制之前停止服务(顺便说一句,安装程序停止应用程序的对话框告诉垃圾 - 但这是一个不同的问题)。基本上这是一个好主意。但是,安装后,服务配置设置为在服务未运行时重新启动服务(服务控制管理器执行此工作)。此配置是一项要求,不能永久更改(只能临时更改)。稍后在升级安装过程中,这有时会与(升级-)安装过程发生冲突。因此,在升级安装的情况下,我想将(旧)服务配置更改为在将文件复制到目标文件夹之前重新启动甚至卸载(旧)服务。否则,如果文件仍在使用中,复制文件有时会失败(因为旧服务再次运行(刚刚由服务控制管理器重新启动),如上所述)。长话短说,我需要在安装程序复制(新)文件之前执行一些代码。

这是一个相关的问题,但答案不适合我的问题: 在文件被 msi 安装程序复制到目标目录之前备份目标目录

标签: visual-studioinstallationsetup-projectvdproj

解决方案


实际的答案似乎是:不可能。我没有时间完全切换到 WIX 或类似的替代方案。这不是一个好的解决方案,但它有效。我解决了如下问题:

  • 创建一个新的“MySetup.exe”应用程序(表单、WPF 或其他)
  • MySetup.exe 根据需要检查现有服务安装(请参阅我的原始问题的详细信息)并卸载服务。所以它执行“自定义操作”。
  • MySetup.exe 包含原始 MSI 文件,并在确保先决条件后启动它。
  • 它检查 MSI 安装的结果以进行进一步的错误处理。
  • 一个优点是我可以轻松地将诸如日志文件名称之类的参数添加到 MSI 安装中。

推荐阅读