从Installer Class停止Windows服务的问题.事件发生得太晚了

Cra*_*g F 3 .net installer windows-services .net-4.0 visual-studio-2010

我正在使用Visual Studio 2010和.NET 4.0.我有一个从Visual Studio安装项目安装的Windows服务.在安装项目中,我将RemovePreviousVersion属性设置为True.

在包含该服务的项目中,我有一个安装程序类,用于在从先前版本升级时停止服务.

因此,在升级软件时,服务已经存在并且可能正在运行.如果它正在运行,则在安装过程中,安装程序会提示该文件已在使用中,并提供"重试","继续"或"退出安装"选项.在这个阶段,我可以手动停止服务,然后单击"重试",这将有效.但我不希望最终用户必须这样做.

我已经在整个安装程序类BeforeInstall,BeforeUninstall(安装程序事件),安装,卸载,提交,回滚(重写方法)中放置了消息框,因此我可以看到在安装过程中何时调用它们.

运行安装时,会在任何安装程序类代码之前显示该文件正在使用的提示.一旦我停止服务并再次单击"尝试"将继续,将显示安装类中的消息框.所以安装程序类肯定被称为在实际执行任何操作的过程中为时已晚.

我不认为这是早期版本的.NET中的行为?

有没有人遇到过这个问题或有任何建议?

如果需要,我可以尝试Visual Studio 2010附带的InstallShiled LE项目(不确定是否会产生相同的结果)但是如果可能的话,我更愿意看看是否有人知道Visual Studio安装项目的解决方案.

Cos*_*rvu 6

FilesInUse安装程序对话框显示try again消息.在InstallValidate操作期间,Windows Installer会自动检测正在使用的文件并提示用户.

解决方案是在InstallValidate操作之前停止(不删除)服务.这可以通过自定义操作完成.

请注意,在使用Visual Studio进行InstallValidate之前,无法设置自定义操作.但是,您可以在生成后使用Orca编辑MSI,并在InstallExecuteSequence表中更改操作序列.

大多数商业设置创作工具和WiX都支持您的操作的自定义序列.