既然 Windows 有「ProgramFiles」目錄,為什麼有的程序還要安裝到「AppData」?

最簡單的例子就是chrome瀏覽器,由於chrome是靜默安裝,會自動安裝到 C:Users你的用戶名AppDataLocalGoogleChrome下面。

還有telegram的默認安裝位置也是這樣的,那麼問題來了:明明提供了programfiles文件夾,為什麼還要在appdata釋放文件呢?


在XP之後,從Vista開始,Windows系統開始有更嚴格的許可權控制。在這之前XP等,哪些是系統的,那些是用戶相關的,其實並沒有很清楚的劃分。那麼一個本地用戶如果是管理員的話,從登陸開始就可以毫無阻礙,基本毫無區別的訪問各種目錄。這是有隱患的,因為不小心就把系統相關的東西搞壞了。也給很多病毒木馬可乘之機。

所以從(失敗的)Vista開始有更嚴格的控制。基本概念就是,即便是管理員,在訪問一些關鍵目錄時候一樣會顯示的要求提升許可權。這樣增加系統的安全性。Program Files就是系統目錄之一。(當然不止這麼簡單,但與問題關係不大)

但這不是重點。重點是,在這之前,很多程序有一種陋習,直接把軟體的數據寫到安裝目錄下,也就是Program Files! 軟體這樣設計也好理解,畢竟自己的安裝目錄下,操作讀取都很方便嘛。而且很綠色,要搬遷到另一個計算機,直接copy整個目錄就一鍋端了....但這樣就有一個問題是軟體甲既然可以寫Program Files目錄,那麼沒有理由不允許寫這個目錄下其他軟體的目錄....如果所有的軟體都沒有錯誤,也沒有惡意當然還好,但是.... 我當時還有個軟體為了藏註冊碼寫system32這種可恥事情我就不提了。

所以,許可權管理嚴格後,如果一個軟體有數據,那麼就必須寫到用戶目錄下。這個用戶目錄是跟用戶有關的(廢話),也就是說用戶甲看到的App Data和同一個計算機下用戶乙看到的實際上不是同一個地方。正常情況下,程序安裝到Program Files這對所有用戶都是可見的統一的,所以軟體一旦安裝,所有用戶都可以用。如果有數據,那麼每個用戶寫道自己的數據目錄,互不干擾。好了,問題看上去解決的很好!

但是。軟體並非都是按照計算機授權的。如果一個軟體拷貝,只能授權給一個用戶,或者只能綁定到一個用戶數據上,那麼顯然安裝到Program Files就不適合了(因為這意味著所有用戶都可以看到)。而此時,用戶目錄下的AppData就是個很好的選擇。

Chrome雖然是免費,但其跟Google賬號綁定,裡面有每個人的密碼,書籤,使用習慣....再加上每個人喜歡的瀏覽器不同,那麼把安裝使用Chrome作為一種個人習慣來看待可能更為適合。所以,最好的選擇就是App Data了。

總結,如果你的軟體是給一台電腦上所有人安裝的,安裝到Program Files。如果你的軟體是按照用戶授權或者希望僅為當前用戶安裝,那麼安裝到App Data。

實際上,即便為所有用戶安裝,我覺得App Data也很有必要存在,因為在電腦上,和用戶相關的(你放在這裡的東西只跟當前用戶有關,跟其他人無關),又確保程序讀寫無障礙的,只有兩個推薦的地方,

1,Users&,一般包括App Data,Temp等

2,HK_CURRENT_USERSoftware&...

有趣的事情是Windows有很好的向下兼容性,所以我那個寫system32的程序(Win98時代開發)現在Windows 10下還能運行。軟體可以成功打開寫入system32,只不過這裡的system32是系統給軟體暴露的一個虛擬目錄,最終仍然會重新定向到User下....相比下mac OSX就真心差太遠,每次他家系統一升級,都得心驚膽戰的要把所有軟體測試一遍,不兼容是常有的事情。要不是考慮OSX下的用戶購買率高,早就不樂意支持他家的東西了。


Program Files 是存放 Program 的,AppData 是存放 Application Data 的。

雖然現代計算機上 Program 和 Data 是一樣的,但是我們仍然可以從概念上區分 Program 和 Data。Program 一般不怎麼改變,而且因為它們可以執行,可以被別的用戶運行等,處於安全考慮,不能隨意向 Program Files 寫入文件。

Application Data 是 per-user 的,每個用戶可以寫自己的 Application Data。

為了修改 Program Files,你需要管理員許可權,或者使用 Windows Store 代為操作。


因為Vista+的Program Files目錄不能讓app隨便寫入。


Program Files文件夾的讀寫需要UAC提升許可權


除了大家說的許可權,還有一方面的原因是,有些軟體是「只給當前用戶使用」,那麼就裝到AppData目錄下,其他用戶是看不到的。我記得早些時候的Chrome離線包下載就有這個選項的。


我想指正一下,題主所舉的 Google Chrome 的例子有誤。

因為你使用的 Google Chrome 安裝程序根本就不是從它的官網下載的。

我覺得你有必要見識一下 Google Chrome 的官方安裝程序是怎樣的。

請移步我的文章:

知陽:下載安裝 Google Chrome 及其擴展程序從未如此簡單!zhuanlan.zhihu.com圖標


就事說事??

為什麼Chrome不遵守規範呢,因為為了更好的使用體驗,chrome默認是在線安裝的,而在線安裝的局限就是不能通過uac獲取管理員許可權,所以就安裝到appdata了!

至於我們都在天朝,國內網站下載的都是原本面向企業的離線安裝包??自然都是默認安裝到Program Files的


推薦閱讀:

windows怎麼玩才不卡?
如何看待微軟的 Windows 10 Cloud?
Windows 下什麼密碼管理工具最值得推薦?
為什麼我按下 Delete + Enter 為輸出6?
Windows 7 和 OS X 都使用無襯線字體,為什麼 Windows 的看起來和 OS X 效果差別很大呢?

TAG:微軟Microsoft | MicrosoftWindows | 應用程序Application |