2017-09-01 90 views
3

我有一個讀取和寫入註冊表文件的程序,以便記住窗口位置等。這對於僅僅是管理員而言非常簡單,但當您僅僅是一名用戶時就非常簡單系統。每個用戶的註冊表值

我使用高級安裝程序,如果你有任何很酷的建議。

  1. 應該在哪裏定位註冊參數,以便每個用戶都可以使用我的應用程序和他們自己的註冊表值?
  2. 該路徑是否足夠通用,以便程序可以找到該文件夾​​而不會遇到問題?

編輯/更新:

問題1:你在哪裏放東西,如果不是在HKEY_CURRENT_USER?

答:當我把這些文件放在HKEY_CURRENT_USER下時,它只會把它放在那個用戶下面。因此,如果我要以管理員身份安裝程序,那只有該用戶擁有這些文件。由於我使用的是高級安裝程序,因此我不確定這是否屬於某些設置值。

聲明1,從波格丹Mitrache: 如果你願意,你也可以利用從Windows安裝程序的自我修復支持(高級安裝也支持),讓安裝程序寫入HKCU下的默認設置爲每個用戶啓動應用程序,即使由管理員安裝。這裏是一個文件的例子,但它也適用於註冊表:advancedinstaller.com/user-guide/qa-self-healing.html

迴應:這是一個很好的解決方案,除了我有條件安裝的問題。用戶可以選擇安裝其中一個或另一個功能,他們都使用這些註冊表值。這可能是爲什麼它不適合我。我將在AI中以邏輯意義來複制文件。

+1

如果不在'HKEY_CURRENT_USER'中,你會把東西放在哪裏? – molbdnilo

+0

也許你應該使用HKCU而不是HKLM – Federico

+0

當我把這些文件放在HKEY_CURRENT_USER下時,它只會把它放在那個用戶下面。因此,如果我要以管理員身份安裝程序,那只有該用戶擁有這些文件。由於我使用的是高級安裝程序,因此我不確定這是否屬於某些設置值。 – 413X

回答

1

來處理這個正確的方法是存儲默認值(例如,在安裝過程中)在HKEY_LOCAL_MACHINE(如果有的話),再後來存儲在HKEY_CURRENT_USER用戶特定值。

當應用程序需要讀取值時,首先檢查HKEY_CURRENT_USER,如果沒有找到,則檢查HKEY_LOCAL_MACHINE(或使用硬編碼的默認值)。

當應用程序需要存儲的值,其存儲只有在HKEY_CURRENT_USER

是的,這是否意味着,如果你的應用是由一個管理員身份運行,在默認情況下它會讀取來自管理員的鍵的值,並存儲在管理的關鍵價值。這完全沒問題,因爲管理員當時是該應用的用戶。如果應用程序由非管理員運行,則值將相對於該用戶。

在應用程序運行作爲管理員用戶,但需要讀取/存儲在其他用戶的HKEY_CURRENT_USER鍵的值的情況(例如,當一個非管理員用戶登錄到Windows和應用程序與UAC運行使用其他用戶的登錄)標高,然後應用程序可以通過打開其他用戶的HKEY_CURRENT_USER關鍵:

  • 冒充其他用戶,然後使用RegOpenCurrentUser()

  • 使用LoadUserProfile()加載其他用戶的配置文件,該配置文件返回加載的用戶的HKEY_CURRENT_KEY密鑰(除其他之外)的句柄。

如果要訪問其他用戶的HKEY_CLASSES_ROOT鍵代替HKEY_CURRENT_USER,您可以使用RegOpenUserClassesRoot()