由于发布政策而导致wpf启动缓慢...也许

时间:2015-06-11 07:26:44

标签: .net wpf deployment installer publisher-policy

我已经使用x-copy部署了我的.NET程序集多年,没有任何问题。 从上周开始,我们有一个小团队,其任务是建立一个包括的设置 .NET程序集和exe和c ++遗留的exe和DLL(更多200个文件)。 第一次安装后,我的wpf应用程序出现问题:启动时间非常长。 我用procmon描述了我的一个wpf应用程序(ps:.NET程序集是GACed和NGened) 我已经看到该过程对所有其他无关(> 200)文件进行多次操作(参见附件截图),我认为 这是应用程序启动时间缓慢的主要原因。 这与.NET发布者政策有关吗?如何禁用此行为以使我的应用程序再次快速? 提前谢谢!

enter image description here

1 个答案:

答案 0 :(得分:1)

这组跟踪似乎与基于"广告"的COM实例化有关。 COM类。在不了解MSI如何组织成功能,组件和COM注册的情况下,很难完全确定。

但无论如何,如果使用MSI文件中的Class表注册COM类,则它们具有称为Darwin描述符的Inp​​rocServer32注册表值(不是键)。它通过功能名称,产品代码和组件代码引用COM实例化的目标,这可能是您在注册表中看到对Windows Installer功能和组件键的引用的原因。通常使用该描述符调用MsiProvideComponent,从而产生弹性检查和修复,如果有任何问题被破坏。

您不会说出您正在使用的工具,但如果您有大量的COM注册,并且所有通过MSIs类表中的注册进行广告都可能是问题。在不知道使用什么工具构建MSI并查看MSI文件的情况下,很难确定。但是,例如,WiX允许您使用Class表进行注册,但使用Advertise = no,这导致使用注册表项完成注册,这是创建COM注册同时避免广告/弹性检查的相当明显的其他方式。

此外,也许最重要的是,您需要确保您的产品安装在启动时实际上并未自行修复 - 这会减慢它的速度!例如,如果在安装后删除任何文件或注册表项,则修复可能会启动。在应用程序事件日志中查找缺少组件的MsiInstaller事件日志条目。