windows - registry reviver授權金鑰




何時-為什麼-應該將數據存儲在Windows註冊表中? (10)

(但討論晚了)簡答:組策略。

如果您的客戶的IT部門想要強制執行與Windows相關的設置或者您正在撰寫或捆綁的組件(如鍊接速度,自定義錯誤消息或要連接的數據庫服務器),則這仍然是典型情況通過組策略完成,這使得它的最終表現形式是存儲在註冊表中的設置。 這些策略從Windows啟動或用戶登錄時開始執行。

有一些工具可以創建自定義ADMX模板,可以將組件的設置映射到註冊表位置,並為管理員提供一個通用界面來強制執行需要強制執行的策略,同時僅向他們顯示那些有助於以此方式實施的設置。

作為開發人員,在註冊表中存儲配置/選項的工具是我生活中的禍根。 我無法輕鬆跟踪這些選項的更改,無法輕鬆地將它們從機器移植到機器,這一切都讓我真的渴望.INI文件的美好時光......

在編寫我自己的應用程序時,我應該選擇放入註冊表而不是舊式配置文件,為什麼?


何時 - 由於傳統集成或客戶的系統管理員說“應該是這樣”,或者因為您正在使用較舊的語言進行開發,這使得使用XML變得更加困難,所以您不得不這樣做。

為什麼 - 主要是因為註冊表不如復制坐在應用程序旁邊的配置文件(並且幾乎相同)。

如果你使用的是.Net2 +,你已經獲得了App.Config和User.Config文件,並且你不需要在註冊表中註冊DLL,所以請遠離它。

配置文件有自己的問題(見下文),但是這些文件可以編碼,你可以改變你的架構。

  • 問題:應用程序需要可配置的設置。
  • 解決方案:將設置存儲在Windows文件夾中的文件(WIN.INI)中 - 使用節標題對數據進行分組(Win3.0)。
  • 問題:WIN.INI文件變得太大(並且變得混亂)。
  • 解決方案:將INI文件中的設置存儲在與應用程序(Win3.1)相同的文件夾中。
  • 問題:需要用戶特定的設置。
  • 解決方案:將用戶設置存儲在用戶的Window目錄(Win3.11)中用戶特定的INI文件或應用程序INI文件中的用戶特定部分。
  • 問題:安全性 - 某些應用程序設置需要是只讀的。
  • 解決方案:具有安全性的註冊表以及用戶特定和機器範圍的部分(Win95)。
  • 問題:註冊表變得太大了。
  • 解決方案:用戶特定的註冊表在用戶自己的“Application Data”文件夾中移至user.dat,並且僅在登錄時加載(WinNT)。
  • 問題:在大型企業環境中,您登錄到多台計算機並必須設置EACH ONE。
  • 解決方案:區分本地(本地設置)和漫遊(應用程序數據)配置文件(WinXP)。
  • 問題:無法xcopy部署或移動應用程序,如.Net的其餘部分。
  • 解決方案:APP.CONFIG XML文件與應用程序位於同一文件夾中,易於閱讀,易於操作,易於移動,可跟踪是否更改(.Net1)。
  • 問題:仍然需要以類似的方式(即xcopy部署)存儲用戶特定的數據。
  • 解決方案:用戶本地或漫遊文件夾中的USER.CONFIG XML文件和強類型(.Net2)。
  • 問題:CONFIG文件區分大小寫(對於人類來說不直觀),需要非常特定的打開/關閉“標籤”,連接字符串不能在運行時設置,安裝項目不能寫入設置(與註冊表一樣容易),無法輕鬆確定user.config文件和用戶設置在安裝每個新修訂版時都會顯示。
  • 解決方案:使用ITEM成員在運行時設置連接字符串,在安裝程序類中編寫代碼以在安裝期間更改App.Config,並在未找到用戶設置時將應用程序設置用作默認值。

如果你正在開發一個新的應用程序,並且你關心可移植性,你應該永遠不要在Windows註冊表中存儲數據,因為其他操作系統沒有(Windows)註冊表(注意 - 這可能很明顯,但經常被忽略)。

如果您只是為Win平台開發,盡可能避免它。 配置文件(可能是加密的)是更好的解決方案。 將數據存儲到註冊表中沒有任何好處 - (例如,如果您使用.NET,隔離存儲是一個更好的解決方案)。


如果您在Windows註冊表中存儲了幾個窗口位置和最近使用的項目列表,世界是否會結束? 到目前為止,它對我來說還好。

HKEY-CURRENT-USER是一個很好的存儲小批量用戶數據的好地方。 這就是它的目的。 僅僅因為其他人濫用了它,它似乎很愚蠢。


從用戶角度和程序員的角度來看,我不得不說,除非像文件關聯或機器特定設置那樣,否則將某些東西放入註冊表中確實不是一種好的優點。

我來自思想流派,認為程序應該可以從安裝的任何地方運行,安裝應該可以在機器內完全移動,甚至可以移動到另一台機器,而不會影響其運行。

任何可配置選項或必需的dll等(如果它們未被共享)應駐留在安裝目錄的子目錄中,以便整個安裝很容易移動。

我使用了很多像程序這樣的小工具,所以如果它不能被安裝在USB棒上並插入另一台機器並運行,那麼它不適合我。


微軟政策:

  • 在Windows 95之前,我們使用ini文件來存儲應用程序數據。
  • 在Windows 95 - XP時代,我們使用了註冊表。
  • 從Windows Vista開始,我們使用ini文件,儘管它們現在基於xml。

註冊表是機器相關的。 我從來不喜歡它,因為它變得緩慢,幾乎找不到你需要的東西。 這就是為什麼我喜歡簡單的ini或其他設置文件。 您知道它們在哪裡(應用程序文件夾或用戶文件夾),因此它們易於攜帶,而且易於閱讀。


我相信Windows註冊表是一個好主意,但是由於應用程序開發人員的大量濫用以及微軟不鼓勵/強制要求的標準策略,這些策略變成了一個難以控制的野獸。 由於你提到的原因,我討厭使用它,但是有些場合使用它是有意義的:

  • 卸載應用程序後,留下一段您的應用程序的痕跡(例如,在應用程序再次安裝的情況下記住用戶的偏好)
  • 在不同應用程序 - 組件之間共享配置設置

稍微偏離主題,但是由於我看到關注可移植性的人們,我曾經使用過的最好的方法是Qt的QSettings類。 它抽象設置的存儲(Windows上的註冊表,Mac OS上的XML首選項文件和Unix上的Ini文件)。 作為班上的一名客戶,我不必花費大腦思考關於註冊表或其他任何事情的大腦循環,它只是工作(tm)。

http://doc.trolltech.com/4.4/qsettings.html#details


通常,如果不將設置放入註冊表中,則主要使用它來獲取當前的Windows設置,更改文件關聯等。
現在,如果您需要檢測您的軟件是否已安裝,您可以在註冊表中進行最小限度的輸入,這是您可以在任何配置中找到的位置。 或者在應用程序數據中搜索給定名稱的文件夾。

如果我查看我的Document and Settings文件夾,我會看到許多使用Unix點符號來設置文件夾的軟件:.p4qt .sqlworkbench .squirrel-sql .SunDownloadManager .xngr .antexplorer .assistant .CodeBlocks .dbvis .gimp-2.4 .jdictionary .jindent .jogl_ext(等)

在應用程序數據中,包含編輯器名稱或軟件名稱的各種文件夾。 看起來像是當前的趨勢,至少在便攜式應用程序中......
WinMerge使用稍微不同的方法,將數據存儲在註冊表中,但在配置對話框中提供了導入和導出選項。


  • 最初(WIN3)配置存儲在Windows目錄中的WIN.INI文件中。
  • 問題:WIN.INI變得太大了。
  • 解決方案(Win31):與程序位於同一目錄中的單個INI文件。
  • 問題:該程序可能安裝在網絡上並被許多人共享。
  • 解決方案(Win311):用戶的Window目錄中的單個INI文件。
  • 問題:許多人可能共享一個Windows文件夾,並且它應該只讀為止。
  • 解決方案(Win95):註冊表,每個用戶都有獨立的部分。
  • 問題:註冊表變得太大了。
  • 解決方案(WinXP):將大塊單個數據移動到用戶自己的Application Data文件夾中。
  • 問題:適用於大量數據,但對於少量數據則相當複雜。
  • 解決方案(.NET):將少量固定的只讀數據存儲在與應用程序相同的文件夾中的.config(Xml)文件中,並使用API​​讀取它。 (讀/寫或用戶特定的數據保留在註冊表中)






registry