2010-07-06 59 views
2

我有一個引用另一個項目的項目,以便利用代碼的某些部分。其中一個項目是一個控制檯應用程序(即項目類型),但由一個重要的代碼庫組成。另一個是引用此控制檯應用程序的GUI應用程序。這樣做的原因是,應用程序可以作爲控制檯應用程序或GUI應用程序運行。控制檯和GUI應用程序之間的註冊表項訪問差異

當GUI應用程序運行時,它絕對可以訪問註冊表,但是當我運行控制檯版本時,它訪問與GUI應用程序相同的代碼,但無法安全地訪問註冊表項。我假設GUI和控制檯應用程序都將通過相同的用戶運行。

這裏是什麼失敗(由隱藏具體細節的變化):

String user = Environment.UserDomainName + "\\" + Environment.UserName; 
RegistrySecurity rs = new RegistrySecurity(); 
rs.AddAccessRule(new RegistryAccessRule(user, RegistryRights.ReadKey | RegistryRights.Delete | RegistryRights.WriteKey | RegistryRights.FullControl, InheritanceFlags.None, PropagationFlags.None, AccessControlType.Allow)); 
mapsynckey = Registry.LocalMachine.CreateSubKey("SOFTWARE\\AppPath\\AppName\\"); 

UserName = mapsynckey.GetValue("user").ToString(); 
Password = mapsynckey.GetValue("pass").ToString(); 
SyncFolderPath = mapsynckey.GetValue("syncfolderpath").ToString(); 

忽略的訪問權限,我只是在嘗試每一個因此隨機混合物。 我收到的錯誤是:

訪問註冊表項 'HKEY_LOCAL_MACHINE \ SOFTWARE \ APPPATH \ AppName的' 被拒絕

這裏的其他事情。我無法在註冊表中的任何位置找到條目,甚至無法在64位部分找到條目。但是,我將註冊表項的詳細信息加載到顯示正常的應用程序中,但如果我瀏覽註冊表,它們不在那裏。

我完全難住了,我已經花了最後3個小時的時間對此進行了處理,並且不知道發生了什麼。


at ApplicationSettings..ctor() in C:\Projects\MapSync\MapSyncConsole\ApplicationSettings.cs:line 34 
    at ApplicationSettings.get_Instance() in C:\Projects\MapSync\MapSyncConsole\ApplicationSettings.cs:line 47 
    at MainApplication..ctor(Boolean forceDownload) in C:\Projects\MapSync\MapSyncConsole\MainApplication.cs:line 27 
    at MapSyncConsole.Program.Main(String[] args) in C:\Projects\MapSync\MapSyncConsole\Program.cs:line 21 
+0

什麼是堆棧跟蹤? – SLaks 2010-07-06 13:44:22

+0

添加爲您的樂趣。 – Kezzer 2010-07-06 13:47:32

+0

也許是因爲控制檯和表單版本的「AppPath」和「AppName」不同? – 2010-07-06 13:52:48

回答

0

不能調用CreateSubKey在HKLM沒有管理員權限。

您應該考慮切換到HKCU。

+0

事實上,這也是我所設想的,但爲什麼GUI應用程序允許這個和控制檯應用程序不是?他們從同一個用戶運行。 – Kezzer 2010-07-06 13:46:55

+0

哦,還有,我是本地管理員,這讓我更加困惑。 – Kezzer 2010-07-06 13:48:12

+0

是否啓用UAC? – SLaks 2010-07-06 14:12:48

1

首先,您是否檢查過(UAC)虛擬化註冊表位置? (See here)。註冊表使用與文件系統類似的機制進行透明重定向。

此外:

  • 該令牌的進程下運行,高架或沒有?假設你已經啓用了UAC:你是否從一個提升的提示符啓動了控制檯應用程序(似乎沒有)?我猜你通過雙擊啓動UI版本?
  • 可能性較低:其中一個可執行文件是否具有嵌入式清單,用於處理提升行爲?
  • 可能性較低:進程(控制檯與UI)是否針對不同的處理器體系結構?
相關問題