2013-01-14 77 views
0

我需要定期將更新後的一組文件(DLL,javascript)作爲補丁發佈到各種版本(vista/XP/7等)的多個Windows PC中。目前,我在我的網站上有一個鏈接,供每個用戶下載setup.exe文件並手動安裝修補程序(替換現有的DLL)。爲了消除手動過程,我正在研究如何在Windows上自動運行程序(我假設這意味着服務),它會定期檢查我的服務器是否有更新,下載並自動觸發setup.exe(或某些類似的過程來取代補丁文件)。我不是Windows開發者本身,但已經下載並試圖檢查各種選項(爲了不重新發明輪子),如Sparkle,DDay,CSAutoUpdater,Npackd,並且剛開始研究谷歌奧馬哈 - 但是大多數人認爲當Windows應用程序開始使用他們的庫/組件時會發生檢查。我需要運行獨立於應用程序的autoupdater,因此我需要先讓所有用戶運行一個setup.exe,它應該安裝並啓動我的Windows服務,以便它可以每天運行Windows以運行程序檢查,下載並安裝更新。如何爲作爲服務運行的Windows應用程序創建自動更新程序?

我發現了一些用於在stackoverflow上編寫windows服務的示例代碼,codeproject也是,但是找不到如何自動安裝它(理想情況下,對於較新的Windows版本沒有UAC麻煩)。所有需要使用instalutil或其他手動過程來安裝和啓動服務。

對此的任何指導將是偉大的!謝謝 - 並且對這個冗長的問題表示歉意。當我嘗試其他產品時會更新結果。

+0

你想要一個MSI解決方案嗎?或者你是否願意自己寫一些代碼?修補程序機制是否需要包含交互式用戶界面? – selbie

+0

我希望儘可能保持更新 - 但不能編輯主應用程序代碼。我只能替換這些文件,並在重新啓動時更新應用程序。我不是一個Windows開發人員,但經驗豐富,足以複製粘貼和修改論壇/谷歌搜索的示例代碼...我使用#Developer而不是Visual Studio - 但有權訪問VS2005(.Net2爲我的主要應用程序)。不確定MSI做什麼。 – Surge

回答

0

爲了消除手動過程,我正在研究如何在Windows上自動運行程序(我假設這意味着服務),它會定期檢查我的服務器是否有更新,下載並自動觸發setup.exe(或者一些類似的過程來取代補丁文件)。

您可能想要爲您的語句的「定期」部分使用Windows任務計劃程序服務。您可以使用它來啓動您實際執行「檢查更新」,下載,複製等所需的任何代碼......我不認爲您需要Windows服務。

您可能會腳本執行任務計劃程序事件。或者使用API以編程方式進行更多操作。

1

正如你提到的Npackd,我想描述一下如何使用它來完成。

我同意selbie最簡單的解決方案就是用Windows調度程序創建任務。

對於Npackd,您需要您自己的存儲庫 - 可通過HTTP訪問的XML文件,例如http://www.yourserver.com/rep.xml。以下是存儲庫的一個簡單示例:https://gist.github.com/raw/4132983/dabecde48c796d4fdfa2f645bb744ac58640572c/TestRepository.xml。用戶可以下載Npackd(http://code.google.com/p/windows-package-manager/downloads/list)並將該URL添加到存儲庫列表中。

我會定義2個包:一個用於程序本身,另一個用於自動更新程序。這樣如果有人想手動更新程序,他也可以這樣做。

您可以使用每個Windows系統上提供的命令行工具schtasks.exe創建或刪除Windows任務。

update命令本身也將是非常簡單的:

npackdcl update --package=<package> 
+0

謝謝!我對Npackd非常感興趣,但並不確定如何爲用戶首次下載一個setup.exe(他們不懂技術並且無法下載和配置npackd)。我必須創建一個setup.exe,它將設置創建npackd安裝所需的所有設置,設置任務計劃程序並運行下載程序。 npackd是否面臨與普通安裝程序相同的UAC /管理權限問題?有任何想法嗎? – Surge

+1

您可以將以下命令集成到.exe安裝程序中,以安裝基於命令行的Npackd版本:0​​msiexec.exe/qb-/i http://bit.ly/npackdcl-1_16_4。 Npackd全局安裝所有軟件包並需要管理權限。 – kaboom

0

您可以如下操作:

  1. 保持DB中的的dll,EXE等版本。
  2. 在應用程序啓動之前,使用數據庫中的版本檢查已安裝版本的版本。
  3. 如果版本不一致,請讓用戶從服務器更新到最新版本。

  4. 如果他點擊YES。從服務器更新文件。

Prasad。

相關問題