我知道我們不應該使用註冊表來存儲應用程序數據,而是在更新Legacy應用程序(並且希望做最少的更改)時,允許非管理員允許使用哪些註冊表配置單元?如果沒有管理員權限,您可以獲得哪些註冊表訪問權限?
我可以在沒有管理員權限的情況下訪問全部HKEY_CURRENT_USER
(當前訪問HKEY_LOCAL_MACHINE
的應用程序)嗎?
我知道我們不應該使用註冊表來存儲應用程序數據,而是在更新Legacy應用程序(並且希望做最少的更改)時,允許非管理員允許使用哪些註冊表配置單元?如果沒有管理員權限,您可以獲得哪些註冊表訪問權限?
我可以在沒有管理員權限的情況下訪問全部HKEY_CURRENT_USER
(當前訪問HKEY_LOCAL_MACHINE
的應用程序)嗎?
在一般情況下,非管理員用戶這對註冊表的訪問:
讀/寫:
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 files
或Windows
目錄中的任何內容。如果您需要寫入文件,手頭上有幾種選擇;描述所有這些將是一個更長的討論。所有選項最終都會寫入%USERPROFILE%
的子文件夾或其他文件夾中,供相關用戶使用。
最後,您的應用程序應該保持在HKEY_CURRENT_CONFIG
之外。這個配置單元保存了99.9999%的應用程序不需要查看的硬件配置,服務配置和其他項目(例如,它包含當前的即插即用設備列表)。如果您需要任何內容,大部分信息都可以通過其他地方的受支持的API獲得。
謝謝。在MSDN上保留了一個沒有結果的搜索,雖然鏈接會很好。這個問答需要更多的曝光。 – 2017-05-23 05:20:44
是的,你應該可以在沒有管理員權限的情況下寫入HKEY_CURRENT_USER下的任何地方。但這實際上是一個私人商店,這臺機器上的其他用戶將無法訪問,因此您無法在其中放置任何共享配置。
「我知道我們不應該使用註冊表來存儲應用程序數據了」 - 我不認爲這是完全正確的。註冊表比文件系統有許多優點,我不知道微軟有什麼指導可以停止在應用程序開發中使用它。您可能不應該使用它來存儲大量的應用程序數據,但它是存儲設置和配置數據的好地方。 – syplex 2017-03-02 18:52:47