本文介紹了c#操作登錄檔提示許可權不夠問題的解決方法,.net4.0中對於登錄檔操作這種高階許可權的東西也限制的比較緊,因此,在程式設計中經常會發現,使用registrykey類進行操作時的各種失效或者各種報錯。
c#許可權不夠登錄檔
在win7中,系統安全係數已經很高了,因此.net4.0中對於登錄檔操作這種高階許可權的東西也限制的比較緊,因此,在程式設計中經常會發現,使用registrykey類進行操作時的各種失效或者各種報錯。
如何解決這問題呢?
首先,因為要操作登錄檔,所以,需要程式以管理員身份執行。在win7系統中的表現即為執行程式時,彈出使用者帳戶控制對話方塊,申請以管理員身份執行。
在專案中新建乙個字尾為manifest的檔案,如下圖所示,
建立成功後,這個檔案中預設就會產生以下內容
複製**
**示例:
<?xml version="1.0" encoding="utf-8"?>
如果要更改 windows 使用者帳戶控制級別,請用以下節點之一替換
requestedexecutionlevel 節點。
指定 requestedexecutionlevel 節點將會禁用檔案和登錄檔虛擬化。
如果要利用檔案和登錄檔虛擬化實現向後
相容性,則刪除 requestedexecutionlevel 節點。
-->
然後按照該xml檔案中的提示,把預設的
複製**
**示例:
這句**更換成下面這句**
複製**
**示例:
這樣程式在執行的是否,便會自動申請管理員許可權!
注:如上更改後,每次除錯程式的是否,也必須將vs以管理員身份執行,這點好蛋疼
但是,僅僅按照如上做還是不夠的,這樣程式在執行時,如果僅僅是讀取登錄檔一般不會有問題,可是一旦有寫登錄檔或者刪除登錄檔等操作時,有時候還是會出錯!
這個問題出在registrykey這個類中的opensubkey函式上
opensubkey函式有3個過載,一般用的時候,都是使用的乙個引數這個過載,如下
複製**
**示例:
registrykey aimdir = software.opensubkey("run");
在僅僅使用乙個過載項開啟登錄檔,一般只能進行讀操作,對於寫操作會報錯崩潰
為了達到寫操作的目的,需要使用兩個引數的這個過載,並把第二個引數設定為true,如下所示:
複製**
**示例:
string regeditpath = @"software\microsoft\windows\currentversion\";
registrykey hkml = registry.localmachine;
registrykey software = hkml.opensubkey(regeditpath, true);
registrykey aimdir = software.opensubkey("run",true);
上面的一段**,就可以成功的設定程式的開機自動執行!進行了一次登錄檔寫操作!
C 讀取登錄檔的許可權問題
c 讀取登錄檔非常簡單方便,指定路徑後,設定對應的字段和屬性值即可 但是從windows vista開始,讀取登錄檔就開始需要許可權了。當然可以簡單的使用管理員許可權開啟,或者在程式的安全性中設定其開啟方式為管理員都行。但是這樣多少還是在客戶端後的使用者層面的設定。如何才能把些工作放在開放端呢。經過...
c 操作登錄檔
1.讀取指定名稱的登錄檔的值 private string getregistdata string name 以上是讀取的登錄檔中hkey local machine software目錄下的 目錄中名稱為name的登錄檔值 2.向登錄檔中寫資料 private void wtregedit st...
C 登錄檔操作
寫這篇日誌以前不是沒有接觸過c 來操作登錄檔,但這次的體會更深入了一點,故筆記如下。首先可以從 登錄檔reg檔案語法規則 了解下.reg檔案的語法規則,因為很多時候是把.reg裡的 轉換為程式裡的啊。知道語法後,可以根據裡面的 開始逐個轉化為c 了。首先是建立hkey,呼叫regcreatekey或...