2013-03-16 36 views
1

我們需要一個我編寫的C#應用​​程序執行其主DLL的自動更新。我們的想法是,當該.exe啓動時,它首先檢查網絡的更新 - 然後下載該更新C#強大的命名和版本控制

一旦下載完成後,我們執行

我之前打算對DLL進行簽名檢查.NET程序集簽名的機制,尤其是當涉及到版本化程序集(從版本1.0到版本1.1)

.NET提供什麼可以幫助我嗎?如何在強命名的限制下正確工作? (可以嗎?)

,我希望在這個問題上的指導和技術,比API和力學

+0

clickonce?...... – 2013-03-16 05:29:41

+0

檢查Clickonce,不難構建。但棘手的是,每次你有新版本時,用戶必須啓動兩次應用程序才能完全更新。當然用戶不會知道,因爲用戶只會看到更新窗口提示一次.http://msdn.microsoft.com/en-us/library/ms227123(v = VS.80).aspx – ljh 2013-03-16 06:21:06

+0

此鏈接效果更好http:// msdn.microsoft.com/en-us/library/xc3tc5xx.aspx – ljh 2013-03-16 06:27:29

回答

1

我覺得更多的,你可能需要一個單獨的進程(比如說update.exe的)來完成這項工作。

原因:如果你有一個正在運行的進程(比如MyApp.exe),並且它正在使用X.dll(加載的模塊),那麼你將無法更新(替換)X.dll,因爲它會拋出例外

System.IO.IOException:進程無法訪問文件'X.dll' ,因爲它正在被另一個進程使用。

因此,您可能必須在加載X.dll模塊之前執行此更新/替換。 如果您需要控制加載程序集,那麼您必須使用Reflections Assembly.Load。如果那是好的。

爲了得到一個DLL的版本號,你可以使用:

Assembly assembly = Assembly.LoadFrom("X.dll"); 
Version ver = assembly.GetName().Version; 

要註冊的組件,您可以使用外部工具,如signtool.exe。 它是Windows SDK的一部分,它需要命令行參數,並且您可以找到更多關於它的信息here