C 操作登錄檔許可權不夠問題怎麼解決

2021-08-21 00:04:48 字數 1543 閱讀 5264

本文介紹了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或...