Visual Studio安装程序,在复制文件之前执行自定义操作

时间:2018-10-23 06:12:05

标签: visual-studio installer setup-project vdproj

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

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

这是一个相关问题,但答案与我的问题不符: Take backup of target dir before files are copied into the target directory by msi Installer

1 个答案:

答案 0 :(得分:0)

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

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