簡體   English   中英

使用C#代碼在Windows 7中讀取/寫入注冊表

[英]Registry read/write in windows 7 using c# code

我有一個Windows C#應用程序,當用戶運行它時,我想將當前時間保存為某個注冊表中的登錄時間,以及當他關閉時作為注銷時間。當我嘗試時,它給了我請求的注冊表訪問權限,不允許例外。曾嘗試授予該注冊表權限,但仍收到該異常。這是我嘗試過的代碼

RegistrySecurity rs = new RegistrySecurity();
string currentUserStr = Environment.UserDomainName + "\\" + Environment.UserName;
rs.AddAccessRule(new RegistryAccessRule(currentUserStr, RegistryRights.WriteKey | RegistryRights.ReadKey | RegistryRights.Delete | RegistryRights.FullControl, AccessControlType.Allow));                
RegistryKey Rkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SYSTEM", true).OpenSubKey("Test", true);
Rkey.SetAccessControl(rs);

我也嘗試使用app.manifest來強制每次以admin身份運行應用程序,但我想保留它作為最后的選擇。 那么還有其他解決方案來讀取/寫入注冊表嗎?

IMO,您的應用程序需要以特權運行。 嘗試以管理員身份運行Visual Studio。

我只是在我的計算機(Windows 7 64位)上以Window Form運行代碼。 我對此沒有任何問題(甚至可以刪除AddAccessRule行)。

因此,問題不在於代碼本身。 您是否嘗試使用與運行代碼相同的用戶來手動更改registry的值? 您從哪個地方(硬盤,網絡驅動器或Internet ..)運行代碼? 我知道從網絡驅動器運行它會帶來問題,請告訴我,也許我可以為您提供進一步的幫助

要訪問HKLM(您正在執行的操作)需要具有管理權限

@Hitesh:您需要將MANIFESTUAC設置為“ requireAdministrator”

在Visual Studio中,可通過以下方法完成:項目屬性->鏈接器->清單文件,並設置:

  • 啟用UAC為是,
  • UAC執行級別-requireAdministrator
  • UAC繞過用戶界面-否

自Windows Vista以來,PS UAC就已經存在...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM