- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Visual Studio 2010 和 .NET 4.0。我有一个从 Visual Studio 安装项目安装的 Windows 服务。在安装项目中,我将 RemovePreviousVersion 属性设置为 True。
在包含服务的项目中,我有一个安装程序类,用于在从以前的版本升级时停止服务。
因此,在升级软件时,服务将已经存在并且可以运行。如果它正在运行,则在安装过程中安装程序会提示该文件已在使用中,并提供重试、继续或退出安装的选项。在此阶段,我可以手动停止该服务并单击“重试”,这将起作用。但我不希望最终用户必须这样做。
我在整个安装程序类 BeforeInstall、BeforeUninstall(安装程序事件)、Install、Uninstall、Commit、Rollback(覆盖方法)中放置了消息框,这样我就可以看到在安装过程中何时调用它们。
当安装运行时,文件正在使用的提示会显示在任何安装程序类代码之前。一旦我停止该服务并单击重试将继续,并且将显示安装类中的消息框。因此,肯定会调用安装程序类,但在实际执行任何操作的过程中为时已晚。
我不认为这是早期版本的 .NET 中的行为?
有没有人遇到过这个问题或者有什么建议?
如果需要,我可以尝试 Visual Studio 2010 附带的 InstallShiled LE 项目(不确定是否会产生相同的结果),但如果可能的话,我更愿意查看是否有人知道 Visual Studio 安装项目的解决方案。
最佳答案
重试消息由 FilesInUse 安装程序对话框显示。在 InstallValidate 操作期间,Windows Installer 会自动检测正在使用的文件并提示用户有关它们。
解决方案是在 InstallValidate 操作之前停止(而不删除)服务。这可以通过自定义操作来完成。
请注意,您不能在使用 Visual Studio 进行 InstallValidate 之前设置自定义操作。但是,您可以使用 Orca 编辑 MSI生成后更改 InstallExecuteSequence 表中的操作顺序。
大多数商业设置创作工具和 WiX 都支持您的操作的自定义序列。
关于.net - 从安装程序类停止 Windows 服务时出现问题。事件触发得太晚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5292459/
我是一名优秀的程序员,十分优秀!