2008-09-09 147 views
40

我知道我們不應該使用註冊表來存儲應用程序數據,而是在更新Legacy應用程序(並且希望做最少的更改)時,允許非管理員允許使用哪些註冊表配置單元?如果沒有管理員權限,您可以獲得哪些註冊表訪問權限?

我可以在沒有管理員權限的情況下訪問全部HKEY_CURRENT_USER(當前訪問HKEY_LOCAL_MACHINE的應用程序)嗎?

+1

「我知道我們不應該使用註冊表來存儲應用程序數據了」 - 我不認爲這是完全正確的。註冊表比文件系統有許多優點,我不知道微軟有什麼指導可以停止在應用程序開發中使用它。您可能不應該使用它來存儲大量的應用程序數據,但它是存儲設置和配置數據的好地方。 – syplex 2017-03-02 18:52:47

回答

64

在一般情況下,非管理員用戶這對註冊表的訪問:

讀/寫:

  • HKEY_CURRENT_USER

只讀:

  • HKEY_LOCAL_MACHINE
  • HKEY_CLASSES_ROOT(這僅僅是一個鏈接HKEY_LOCAL_MACHINE\Software\Classes

它是可以改變的部分權限,一鍵逐鍵的基礎上,但它是非常罕見的。你不應該擔心這一點。

出於您的目的,您的應用程序應該將設置和配置寫入HKEY_CURRENT_USER。規範的地方是HKEY_CURRENT_USER\Software\YourCompany\YourProduct\

您可能會在HKEY_LOCAL_MACHINE中保存全局設置(對於所有用戶)。這是非常罕見的需要做到這一點,你應該避免它。問題是,任何用戶都可以「讀取」這些內容,但只有管理員(或通過擴展名,您的安裝/安裝程序)才能「設置」它們。

其他常見的麻煩來源:您的應用程序不應寫入Program filesWindows目錄中的任何內容。如果您需要寫入文件,手頭上有幾種選擇;描述所有這些將是一個更長的討論。所有選項最終都會寫入%USERPROFILE%的子文件夾或其他文件夾中,供相關用戶使用。

最後,您的應用程序應該保持在HKEY_CURRENT_CONFIG之外。這個配置單元保存了99.9999%的應用程序不需要查看的硬件配置,服務配置和其他項目(例如,它包含當前的即插即用設備列表)。如果您需要任何內容​​,大部分信息都可以通過其他地方的受支持的API獲得。

+2

謝謝。在MSDN上保留了一個沒有結果的搜索,雖然鏈接會很好。這個問答需要更多的曝光。 – 2017-05-23 05:20:44

3

是的,你應該可以在沒有管理員權限的情況下寫入HKEY_CURRENT_USER下的任何地方。但這實際上是一個私人商店,這臺機器上的其他用戶將無法訪問,因此您無法在其中放置任何共享配置。

相關問題