筆者前幾天在微軟新聞組看到一篇帖子,咨詢如何令面向客戶的商用計算機 在安裝某些必須重啟才能生效的系統更新時不彈出確認重啟的對話框,以便不讓這個對話框干擾客戶的正常使用。雖然筆者先後提供了一些建議,但由於這位提問者 描述的計算機實在太“商用”了,最終也沒能完美解決。安裝某些系統更新時必須重啟、商用計算機工作時不能重啟,這似乎是一對永遠也無法調和的矛盾。
為什麼某些 Windows 系統更新在安裝時必須經過重新啟動才能生效呢?這主要是由於需要升級的系統文件當前正在被操作系統使用,缺少相應的系統文件將立即引起 Windows 的崩潰,因此唯有關閉 Windows 並重新啟動,在重啟的過程中完成相應系統文件的升級。例如,本月(2009 年 6 月)發布的 MS09-025(KB968537)就屬於這樣的更新,涉及到 Windows 內核文件的升級必須要重啟。相反地,另外一些需要升級當前可能沒有被使用的系統文件的更新在安裝時可能就不需要重啟,例如本月發布的 MS09-022(KB961501),假如我們當前並沒有開啟 Windows 後台打印服務,安裝此更新時可能就不需要重啟。
正是由於某些更新安裝時必須要重啟,為了防止重啟可能引起的數據丟失, 更新程序在重啟前都會彈出確認對話框以提醒用戶。一旦對話框彈出,就有可能干擾到商用計算機正處於前台的應用程序,令正在使用前台應用程序的客戶(例如正 在操作銀行 ATM 機的客戶)或非計算機專業人士(例如不太懂計算機的大爺大媽年齡段的工作人員)不知怎麼辦好。為了避免這樣的困擾,我們應當盡量避免商用計算機在工作時彈 出重啟確認對話框。這可以參照如下幾種情況處理:
1.以本地安裝的方式安裝更新:
假如我們安裝更新程序的方式是手動從微軟網站下載安裝文件並保存於本地 (.MSU 或 .EXE 文件),然後人工執行安裝,那麼可以以命令行的方式添加 -QUIET -NORESTART 兩個參數進行。-QUIET 表示以不需人工干預的靜默方式執行安裝;-NORESTART 表示如果更新需要重啟時暫不重啟。這樣就可以不聲不響地安裝這個更新,等到工作時間過後再手動重啟了。注意 -NORESTART 參數需要 -QUIET 參數的配合才可以生效、單獨使用沒有意義。
這種方法比較適合於辦公室裡的一兩台的公用計算機。例如今天早上我發現 微軟發布了 6 月安全公告並手動下載了相應更新的安裝文件,可以以 -QUIET -NORESTART 的方法先把它們安裝上、但不重啟,白天這台計算機的工作都不會受到重啟的影響。等到下班時把計算機關掉,明早重新開機時,這幾個需要重啟的更新已經安裝完 畢了。
2.以 WUAU 或 WSUS 方式安裝更新:
本地安裝的方式畢竟有些繁瑣,因此很多人選擇了開啟 WUAU 本地自動更新。對於計算機數量較多的企業而言,部署 WSUS 也是一種明智的選擇。不過,以 WUAU 或 WSUS 方式安裝更新無法應用 -QUIET -NORESTART 參數,這兩個參數是本地安裝方式專用的,目前也沒有擴展 WUAU 或 WSUS 的方法。如果我們已經通過 WUAU 或 WSUS 的方式啟動了需要重啟的更新程序的安裝,那麼這個更新的重啟對話框就將無法避免。組策略中雖然有一項“計劃的自動更新安裝後不自動重啟”,但也不能完全阻 止對話框的出現,區別僅僅是此策略啟用時詢問用戶是否立即重啟、此策略被禁用時通知用戶五分鐘後自動重啟而已。這兩種類型的對話框都將干擾商用計算機的前 台程序。
所以,如果我們不打算讓商用計算機的前台程序受到任何的干擾,唯有令 WUAU 或 WSUS 暫不啟動更新的安裝,而是只下載更新、延後執行安裝。我們可以在組策略的“計算機配置”-“管理模板”-“Windows 組件”-“Windows Update”中設置“配置自動更新”,然後選擇其第四項“4.自動下載並計劃安裝”並設置一個工作時間外的計劃時間。這樣在工作時間段內,WUAU 或 WSUS 就將只在後台獲取更新、但暫緩安裝。只要安裝沒有執行的話,商用計算機的前台就不會有任何提示;等到進入非工作時間,再根據計劃的時間統一安裝更新並重 啟。
3.無休息式 7×24 小時商用計算機:
無論是本地安裝還是 WUAU 或 WSUS,之前所說的兩種方法都只是將更新重啟的時間延後至非工作時間。但我們知道有很多商用計算機是 7×24 小時無休息的,它們可能每天、每周甚至每月只有一次寶貴的重啟的機會。筆者在新聞組中遇到的那個問題就是應用了 WSUS 的 7×24 小時的銀行 ATM 機,這些 ATM 機只在每天凌晨三四點鐘用戶比較稀少的時候可以有一次重啟的機會。但是即便將“計劃的自動更新安裝後不自動重啟”設置為啟用、即便設置的計劃時間是凌晨三 四點鐘這個時段,ATM 機也依然會遇到問題。
根據這位仁兄的介紹,ATM 機的觸摸屏程序默認是全屏並處於前台的,它可以判斷用戶是否已經取走了他的銀行卡,如果 ATM 機內依然有卡,觸摸屏程序可以阻止尋常的 ATM 機關機,但無法阻止更新重啟對話框搶占前台對自身的影響,而 WSUS 又無法判斷用戶是否已取卡,這樣就容易引起問題。例如,假設一位半夜不睡覺的夜貓子用戶恰好在凌晨三四點鐘來取錢,在銀行卡沒取走的時候遇到 WSUS 計劃重啟,ATM 機的觸摸屏程序在重啟對話框出現後將被迫轉入後台,此時用戶無法繼續觸摸操作,只能選擇令更新程序重啟。但重啟後,重新運行的 ATM 機觸摸屏程序將無法吐卡。因為銀行有規定,重啟時用戶可能會離開現場尋求幫助,為了防止他人盜卡所以禁止吐卡。這時這位夜貓子用戶可以說是叫天不應、叫地 也不靈了,即使去找銀行的工作人員求助,也必須等上幾個小時,待天亮銀行上班後才行。
筆者看完這位仁兄的敘述感覺系統更新程序與 ATM 機觸摸屏程序都需要改進。系統更新程序假如能不彈出搶占前台的對話框、而是只在任務欄通知區域等地方提示,就不會引起 ATM 機觸摸屏程序的失效;ATM 機觸摸屏程序如果能始終強制在前台顯示,將所有彈出對話框遮擋於後台,就像 Windows 任務管理器一樣,也可以阻止自身被重啟對話框搶走前台顯示。不論哪一方能“謙讓一步”或“強硬一點”,這個問題都可以解決。總之這個問題目前似乎沒有什麼 太好的解決方法,目前只能寄希望於系統更新程序或 ATM 機觸摸屏程序有所改進。