2015-06-11 37 views
0

我已经用x-copy部署了我的.NET程序集多年,没有任何问题。 从上周开始,我们有一个小团队,其任务是构建包括 .NET程序集和exe和C++遗留exe和dll(更多200个文件)的设置。 第一次安装后,我的wpf应用程序出现问题:启动时间非常长。 我已经通过procmon 描述了我的一个wpf应用程序(ps:.NET程序集是GACed和NGened),我已经看到该进程对所有其他无关(> 200)文件和I认为 这是导致应用程序启动时间过慢的主要原因。 这与.NET发布者策略有关吗?我如何禁用这种行为,使我的应用程序再次快速? 在此先感谢!由于发布策略导致wpf启动缓慢......也许

enter image description here

回答

1

那痕迹集似乎与基于“公布” COM类COM实例。在不了解MSI如何组织成功能,组件和COM注册的情况下,很难完全确定。

但无论如何,如果COM类使用MSI文件中的类表注册,那么它们有一个名为Darwin描述符的Inp​​rocServer32注册表值(不是关键字)。它通过功能名称,产品代码和组件代码引用了COM实例化的目标,这可能是您看到对注册表中的Windows Installer功能和组件键的引用的原因。通常使用该描述符调用MsiProvideComponent,如果发生任何问题,将导致恢复检查和修复。

你不说你使用什么工具,但如果你有大量的COM注册的这一切都通过注册在MSI的Class表广告,可能是这个问题。不知道你使用什么工具来构建MSI并查看MSI文件,这很难确定。但WiX的,例如,您可以使用类表登记,但使用广告=没有,而且在登记结果使用注册表项,这是相当明显的其他方式来创建COM注册,同时避免广告/弹性的检查正在进行。

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

+0

@PhilDW您好,感谢您详细的解答。今天我得到了新闻,我的设置团队使用Install Shield创建msi文件。 Install Shield中有一些选项可以避免上述问题? – laertes

+0

我不知道,对不起,你需要看看是否有使用像“非广告的COM注册”或“使用注册表,而不是Class表”条款的选项。 – PhilDW