visual-studio - Visual Studio 安装程序,在复制文件之前执行自定义操作
问题描述
我正在使用常规的 Visual Studio 安装项目来部署服务。在安装程序复制文件之前,我需要执行自定义操作。AFAIS 所有自定义操作(源自 Installer ...)都是在复制文件后执行的(这很明显,因为它们需要以某种方式执行)。
实际的问题是,安装程序会自行检查哪些文件正在使用并在复制之前停止服务(顺便说一句,安装程序停止应用程序的对话框告诉垃圾 - 但这是一个不同的问题)。基本上这是一个好主意。但是,安装后,服务配置设置为在服务未运行时重新启动服务(服务控制管理器执行此工作)。此配置是一项要求,不能永久更改(只能临时更改)。稍后在升级安装过程中,这有时会与(升级-)安装过程发生冲突。因此,在升级安装的情况下,我想将(旧)服务配置更改为不在将文件复制到目标文件夹之前重新启动甚至卸载(旧)服务。否则,如果文件仍在使用中,复制文件有时会失败(因为旧服务再次运行(刚刚由服务控制管理器重新启动),如上所述)。长话短说,我需要在安装程序复制(新)文件之前执行一些代码。
这是一个相关的问题,但答案不适合我的问题: 在文件被 msi 安装程序复制到目标目录之前备份目标目录
解决方案
实际的答案似乎是:不可能。我没有时间完全切换到 WIX 或类似的替代方案。这不是一个好的解决方案,但它有效。我解决了如下问题:
- 创建一个新的“MySetup.exe”应用程序(表单、WPF 或其他)
- MySetup.exe 根据需要检查现有服务安装(请参阅我的原始问题的详细信息)并卸载服务。所以它执行“自定义操作”。
- MySetup.exe 包含原始 MSI 文件,并在确保先决条件后启动它。
- 它检查 MSI 安装的结果以进行进一步的错误处理。
- 一个优点是我可以轻松地将诸如日志文件名称之类的参数添加到 MSI 安装中。
推荐阅读
- javascript - Chrome 扩展仅适用于开发工具
- laravel - Laravel: How can I add an individual price from a table for each date within a given date range?
- reactjs - 如何使用反应引导程序获取功能组件中的表单值?
- swift - ios 13 whatsapp中的VoIP通知工作
- javascript - XMLHttpRequest 随机返回错误 500,无法找出模式
- ios - 没有可见导航栏的 iOS 左上返回按钮
- python - 断言错误,类型对象“学生”没有属性“名称”
- docker - docker多阶段构建期间的Gradle依赖缓存?
- python - 在pycharm中导入ckdtree
- c++ - 应该如何编写 C++ 函数来计算到点的最近距离?