2015-06-11 61 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