2016-02-28 94 views
0

我有一個安裝在多個遠程工作站上的Windows應用程序(用C#編寫),安裝由MSI包完成。C# - 一個Windows應用程序自動更新的方法

對於每次更新,我們會不時更新安裝程序並隨時更新程序,對於每個需要到達.MSI所在位置的站點,都會複製它並運行它,啓動應用程序。

我想這樣做:每當用戶嘗試啓動應用程序時,後臺進程將被初始化,以將安裝的版本與.msi位置上的最新版本進行比較,如果需要的更新將運行安裝並比啓動應用程序。

問題是,它不能從程序內完成,因爲在安裝/升級發生時程序無法運行。另一個考慮是,並非所有的電臺同時工作,所以我無法及時安排升級,並且在電臺啓動時無法完成,因爲有時需要在電臺已經運行時完成更新(電臺有幾個功能旁邊我的應用程序)。

我已經考慮了幾種方法,它似乎是一個Windows服務可以做的伎倆,但我不知道它是否可以「綁定」到程序的初始化,如果它可以暫停程序來做必要的檢查和更新,而不是重新啓動應用程序。

我願意接受所有的想法,所以請不要覺得有義務我的想法......

回答

1

在這一點上,對於每個更新,每個站需要我們去那裏的.MSI 位於複製它並運行它,只有啓動應用程序。

給那個冒充系統管理員的傢伙起火。

除非您在安裝程序中做了一些奇怪的事情 - 它應該可以在您的標準軟件分發包中使用。哎呀,只要MSI允許管理員不使用ui安裝,我就可以只使用活動目錄並沒有第三方軟件發佈更新。

您嘗試解決一個非問題。軟件分發是過去15到20年內解決的問題。 MSI特別爲解決這個問題而創建,因爲其他方法表現出了問題。

因此,假裝成爲貴公司管理員的人需要共同行事,併成爲一員。什麼都不要做(除了做一個好的MSI)並讓管理員完成他的工作。

其他一切只會造成很多問題(至少在成本方面)。而且完全不需要。

+0

我是一個系統管理員,所以我會堅持現在的開槍步驟......我沒有完全明白你在說什麼,正確的方法是什麼? – petric

+0

如果你足夠大,這是一個問題(不只是2-3次安裝),那麼基本上你應該有軟件清單和分配。最便宜的windows解決方案是使用活動目錄。 https://technet.microsoft.com/en-us/library/cc783635(v=ws.10).aspx在概念上解釋了這一點。 (使用Active Directory分配和發佈軟件)。 – TomTom

+0

@TomTom,您認爲ClikcOnce是實施新技術,但推薦AD用於庫存。吃驚...... –

0

我在更新我的答案,

這就是我們所做的....

  1. 創建安裝/包(可以安裝在這裏的所有用戶)
  2. 生成引導程序(https://msdn.microsoft.com/en-us/library/ms165429.aspx 您可以使用此工具創建的引導程序(http://www.softpedia.com/get/Programming/Other-Programming-Files/Bootstrapper-Manifest-Generator.shtml

  3. 添加依賴關係和其他條件,引導程序

  4. 設置URL更新

這將解決您的問題。我很快回答,但是我們這樣做。

謝謝。

「我想的是:每當用戶試圖啓動應用程序後臺進程將被初始化,將安裝的版本與最新版本進行比較

+0

-1。 ClickOnce適合某些軟件,適合其他人。這裏沒有任何命名要求 - 我會嚴肅地勸告別人「只使用clickonce」。 – TomTom

+0

@TomTom自2006年以來,我一次點擊一次。它現在超過10年。當您以分佈式模式進行安裝時,我看不到任何問題。你是否倒下了我的答案? –

+0

點擊一次不是要走的路,主要是因爲該應用程序是按每臺機器安裝的,而不是按用戶安裝的。 – petric

0

有關問題的假設一些意見和答案在.msi位置,如果需要的更新將運行安裝並啓動應用程序。「

唯一可能是一種有用的方法是MSI在公司的網絡服務器上。該網站可以託管一個web api,您可以將您的ProductCode,版本,升級到,並報告是否有升級,補丁等,以及從中下載它的位置。如上所述,在公司領域,只需使用AD。

「問題在於,它不能在程序中完成,因爲安裝/升級發生時程序無法運行。」

爲什麼? Windows Installer將顯示最終用戶的FilesInUse對話框以關閉正在運行的應用程序。所以這種情況已經得到解決,我不確定你在哪裏看到問題。

「...並且它可以暫停程序來執行必要的檢查和更新,並且只能重新啓動應用程序。」

這正是重新啓動管理器的用途。將您的應用程序與RM集成,Windows安裝程序將允許您關閉應用程序(保存需要恢復的任何數據),然後重新啓動,以便恢復數據,並且用戶看到最小的中斷。舉個例子:

http://www.codeproject.com/Articles/772868/Restart-Manager-Support-For-Windows-Application

所以我認爲TomTom的觀點是正確的 - 沒有必要重新發明做什麼廣告,或者擔心如何更新運行,或如何重新啓動後,程序的程序一個安裝程序更新,因爲所有這些問題都是多年前解決的。