Share via


Windows 機密文件不管好壞,機會平等

Raymond Chen

不知道您是否納悶過, 為什麼您在解除安裝程式時,Windows® 總會以刪除檔案「可能會使其他應用程式無法正常執行」,來問您它該不該刪除檔案?首先我要說明的是,這則訊息 (請參閱螢幕擷取畫面) 並非由 Windows 發出,而是由解除安裝程式發出。因此,您該問的其實是:「為什麼應用程式解除安裝程式會顯示這個對話方塊?」。如果說有什麼問題可以問倒使用者的話,這個問題就是最好的例子。到底為什麼會導致這步田地呢?

為了管理由多個應用程式使用之檔案的參考次數 (例如,由多個不相關程式所用的 MFC 執行階段程式庫),安裝程式以 SharedDLL 登錄機碼建立了一個項目。這個項目會列出該檔案及其參考次數,如果該檔案已經有一個項目,參考次數就會累加。如果該項目還不存在,參考次數就設為 1。相反的,當程式被解除安裝時,參考次數就會減少,當它遞減到 0 時,該檔案就會被刪除,因為那表示已經沒有任何程式在使用它了。至少理論上是如此。

Should I delete it or not?

Should I delete it or not?  (按影像可放大)

這個模型有一個很嚴重的問題,那就是它假設每一個人都願意遵守遊戲規則。但是這卻導致誘惑欺騙的情況更甚,因為最後欺騙者通常都不會受到懲罰。

舉個例說,假設現在有一個使用 MFC 執行階段程式庫的程式,其安裝程式把這些程式庫複製到系統目錄中,卻沒有更新參考次數。這麼一來,當該程式被解除安裝時,它會把程式庫一併刪除。如果該程式企圖與遵守規則的程式並存,那麼會發生什麼情況呢?下面就是事件的基本轉折:

  1. 安裝好程式:安裝程式庫,將參考次數設為 1。
  2. 安裝壞程式:安裝程式庫,但是參考次數不變。
  3. 解除安裝壞程式:刪除程式庫。

這幾個事件的結果是導致好程式停止運作,因為程式庫現在全沒了。

下面是另一個案例:

  1. 安裝好程式:安裝程式庫,將參考次數設為 1。
  2. 安裝壞程式:安裝程式庫,但是參考次數不變。
  3. 解除安裝好程式:參考次數降到 0,然後刪除程式庫。

這個案例的結果是讓壞程式停止運作。

撰寫好程式的人認為:「我們是沒辦法阻止壞程式影響我們,不過至少可以盡量不讓我們自己影響壞程式吧。」因此當他們要刪除檔案時,會先停下來顯示一則警告訊息:「照過來!照過來!我要刪除檔案了,可以嗎?」。如果有一個壞程式仍在使用它,壞程式就會受到影響。如果您手上有一個壞程式,就得按「不要刪除」。好啦我知道,這不是它真正的措辭,不過您應該知道我說的是哪一個對話方塊吧。就連一代才子 Jeffrey Richter 都曾經在 1996 年的 Microsoft Systems Journal 文章中推薦這個做法。

不過,使用者如果採用這個做法,就得面對一個他沒機會答對的問題。

當然嘍,那些要求 Windows 讓他們覆蓋所有前一個動作的控制狂,應該會對這個對話方塊鼓掌叫好吧。即使是世界級的解除安裝程式也會讓您依檔案控制解除安裝程序,所以當您開口要求的時候千萬要小心謹慎,因為您很可能會如願以償。

Raymond Chen的網站「The Old New Thing」以及同名著作均探討 Windows 的歷史和 Win32 程式設計。他很想知道核聚變在他有生之年是否能夠實現。

© 2008 Microsoft Corporation and CMP Media, LLC. 保留所有權利;未經允許,嚴禁部分或全部複製.