Windows-7

將 DLL 文件更新部署到 Win7 客戶端的最佳方法

  • October 7, 2015

我們處於 Windows 7 / Server 2008 R2 域環境中。我們有一個 .NET 應用程序,其中包含許多用於不同 UI 和其他功能的內部庫。我們從一個共享中部署它,其中為每個具有最新版本號的“發布”創建一個目錄。有時,有些部門需要在應用程序中進行一些調整以滿足其特定需求,並且他們迫切需要在下一個版本之前進行更改。我們可以通過給他們一些自定義的 DLL 文件來做到這一點,其中包含請求的更改。我正在嘗試設計一種最可靠和最有效的方法,讓我們的客戶端機器自動檢查並複制這些“自定義”文件。我想以一種最有效、最可靠、集中管理並且對客戶端的成本最少的方式來做到這一點。優選地,當我們有自定義文件要部署時,我們希望所有客戶端在我們將它們放入共享後的 24 小時內將它們複製下來。他們將進入目前網路發布目錄的子文件夾,名為“自定義”或類似名稱。我們目前沒有 SCCM,所以我正在考慮以下選項:

  1. 用於檢查網路目錄並使用 robocopy 或 xcopy 複製(覆蓋)本地文件的使用者的批處理文件登錄腳本。這將要求使用者註銷並重新登錄,因此獲取任何自定義文件可能會有延遲。使用者將有一種簡單、可靠的方式來觸發它,這將是一個加分項。
  2. 通過組策略首選項配置的計劃任務,每天檢查網路目錄幾次以查找任何自定義文件。這可能比使用者登錄腳本更快地獲取文件,但我沒有使用 GPP 計劃任務項目的經驗。設置和維護是否可靠且簡單?同樣,此任務將執行批處理腳本來檢查網路上的文件並使用 /xo 選項啟動 robocopy。如果我們將任何文件放在自定義目錄中,我們將假定它們是必需的,無論版本如何。簡單地檢查文件日期應該可以工作,因此一旦它們到位,它們就不會被一遍又一遍地重新複製。
  3. 與上述相同的計劃任務,但基於事件日誌條目觸發。這可靠嗎?我從未嘗試過。找到一個表明應用程序剛剛啟動(或關閉)的事件觸發器可能是有利的,然後立即復製文件,這樣使用者工作被中斷的可能性就會降低。
  4. 我知道還有一個用於管理/複製文件的組策略首選項項目。我相信在這種情況下管理工作量太大,因為在應用程序的多個版本中可能一次處理多個文件。
  5. 我還考慮了一個 Powershell 腳本,它可以做一些有趣的事情,比如比較實際的 DLL 文件版本等,但這可能需要更多的資源成本(執行速度較慢),而且確實做得比需要的多。

關於什麼可能最有效的任何其他想法?最簡單的答案(使用者登錄腳本)真的是最好的嗎?

我最終選擇了選項#1,一個使用者登錄腳本,現在它已經可靠地工作了一段時間。我會在這裡發布整個腳本,但它充滿了內部應用程序細節,這使得它對於一般用途幾乎毫無用處。最有趣的細節是我們使用 wmic 來獲取本地安裝的應用程序的內部版本號,並使用它來引用我們部署伺服器上的正確版本目錄。此程式碼設置一個名為 Version 的變數以匹配從 wmic.exe 返回的值

set "myfile=c:\\progra~2\\%AppFolder%\\AppName.exe"

for /f "tokens=*" %%f in ('wmic datafile where "name='%myfile%'" get version /value ^| findstr "="') do set "%%f"

引用自:https://serverfault.com/questions/692380