![將 DLL 檔案更新部署到 Win7 用戶端的最佳方法](https://rvso.com/image/658349/%E5%B0%87%20DLL%20%E6%AA%94%E6%A1%88%E6%9B%B4%E6%96%B0%E9%83%A8%E7%BD%B2%E5%88%B0%20Win7%20%E7%94%A8%E6%88%B6%E7%AB%AF%E7%9A%84%E6%9C%80%E4%BD%B3%E6%96%B9%E6%B3%95.png)
我們處於Windows 7 / Server 2008 R2網域環境中。我們有一個 .NET 應用程序,其中包含許多用於不同 UI 和其他功能的內部庫。我們從共用中部署它,其中為每個「版本」建立具有最新版本號的目錄。有時,有些部門需要在應用程式中進行某些調整以滿足其特定需求,並且他們在下一個版本發布之前迫切需要進行更改。我們可以透過向他們提供一定數量的自訂 DLL 檔案以及其中所要求的變更來做到這一點。我正在嘗試設計一種最可靠、最有效的方法,讓我們的客戶端電腦自動檢查並複製這些「自訂」檔案。我希望以最高效、最可靠、集中管理且客戶端開銷最少的方式做到這一點。最好,當我們有要部署的自訂檔案時,我們希望所有客戶端在我們將它們放在共用上後 24 小時內將它們複製下來。它們將進入目前網路發布目錄的子資料夾,名為「Custom」或類似名稱。我們目前沒有 SCCM,因此我正在考慮以下選項:
使用者的批次檔案登入腳本將檢查網路目錄並使用 robocopy 或 xcopy 複製(覆蓋)本機檔案。這將需要用戶登出並重新登錄,因此獲取任何自訂文件可能會出現延遲。用戶將有一個簡單、可靠的方式來觸發它,這將是一個優點。
透過群組原則首選項配置的排程任務,可能每天檢查網路目錄幾次以查找任何自訂檔案。這可能比使用者登入腳本更快地取得文件,但我沒有使用 GPP 規劃任務項目的經驗。設定和維護是否可靠且簡單?同樣,此任務將執行批次腳本來檢查網路上的文件,並使用 /xo 選項啟動 robocopy。如果我們將任何文件放入自訂目錄中,我們將假設它們是需要的,無論版本如何。只需檢查文件日期就可以了,這樣一旦文件就位就不會被一遍又一遍地重新複製。
計劃任務與上面相同,但基於事件日誌條目觸發。這樣可靠嗎?我從來沒有嘗試過。找到一個指示應用程式剛啟動(或關閉)的事件觸發器可能是有利的,然後立即複製文件,這樣使用者的工作被中斷的機會就會減少。
我知道還有一個用於管理/複製文件的群組原則首選項。我認為在這種情況下管理工作量太大,因為應用程式的多個版本可能會同時處理多個檔案。
我還考慮過使用 Powershell 腳本,它可以做一些有趣的事情,例如比較實際的 DLL 檔案版本等,但這可能需要更多的資源開銷(運行速度更慢),並且確實比需要的要多。
關於什麼可能最有效還有其他想法嗎?最簡單的答案(使用者登入腳本)真的是最好的嗎?
答案1
我最終選擇了選項#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"