【问题标题】:Visual Studio Installer, perform custom action before files are copiedVisual Studio 安装程序,在复制文件之前执行自定义操作
【发布时间】:2018-10-23 06:12:05
【问题描述】:

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

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

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

【问题讨论】:

  • 不错。这个问题在我发布后几分钟内就被否决了 3 次,没有提及原因。

标签: visual-studio installation setup-project vdproj


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多