首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可以在RemoveExistingProducts之前安排InstallValidate自定义操作吗?

可以在RemoveExistingProducts之前安排InstallValidate自定义操作吗?
EN

Stack Overflow用户
提问于 2010-01-13 15:42:19
回答 4查看 5.6K关注 0票数 9

问题

我有一个MSI,它在安装期间创建和启动Windows服务,并在卸载期间停止和删除该服务。这本身在安装和卸载时工作良好,但升级时会显示Files in Use对话框(仅在Vista上,随后由于新的重启管理器),这表明服务正在使用。

背景

InstallExecute序列期间,InstallValidate自定义操作会显示“正在使用的文件”对话框,该操作安排在RemoveExistingProducts自定义操作之前;这意味着上一个版本尚未卸载,因此应显示“使用中的文件”对话框。

MSDN文档表明,RemoveExistingProducts操作必须排在InstallValidate操作之后,而且我目前在InstallValidate操作之后立即调度了RemoveExistingProducts操作。

势解

我想将RemoveExistingProducts自定义操作重新安排到InstallValidate自定义操作之前,以便在显示文件在使用对话框之前,以前的安装有机会停止和删除服务。我试着重新安排操作的时间,它似乎正常工作,没有不良副作用(尽管日志仍然表明InstallValidate操作在RemoveExistingProducts操作之前执行),但是我不太愿意使用这个解决方案,因为它违反了MSDN文档,而且可能有一些我还没有看到的负面影响。

有人试过这个吗?我唯一能想到的其他选择是让新安装停止旧安装的服务,但这是不可取的,因为它要求安装包含有关它可以升级的所有旧安装的信息(停止这个特定的服务可能不仅仅是简单地调用service Manager来停止它)。

EN

Stack Overflow用户

发布于 2011-04-07 04:58:05

它已经内置到MSI / Windows安装程序..。唯一的问题是.NET安装程序类不使用MSI“服务安装”特性。实际发生的情况是,MSI试图使用刚刚复制的文件安装文件并运行自定义命令(即Visual在MSI中所放的全部文件)。

要解决这个问题,可以使用ORCA编辑MSI,并将下面的行添加到ServiceControl表中:

代码语言:javascript
运行
复制
1   ServiceName 170     1   C__489628C5CC1144CB47F43E8BE7F3F31D

您可以从文件表中查找的组件ID .我只是选择了主EXE文件的组件ID。170是一个位图,它告诉Windows安装程序在安装和卸载时停止和删除服务。

这将为.NET安装程序添加服务扫清道路,您可以在通过自定义命令安装服务之后使用ServiceController启动服务。

票数 2
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2057936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档