服務程式C 編寫系統服務,登錄檔讀寫問題

2021-06-19 20:59:41 字數 2623 閱讀 8840

預設情況下,服務與已登入的使用者在不同的安全上下文中執行。服務在稱為 localsystem 的預設系統帳戶的上下文中執行,該帳戶給服務提供的系統資源訪問特權不同於給使用者提供的。

所以服務程式訪問登錄檔的currentuser時並不是你當前登陸賬號下的currentuser,所以在你當前陸賬號下的currentuser下建立的鍵值,服務程式根本無法訪問到,給人的錯覺就是服務程式無法讀寫登錄檔,其實不然,只是它讀寫的地方不是你想要它讀寫的地方。

解決的辦法有兩個,乙個是在服務管理器理,雙擊你的服務,在登入標籤裡修改服務的登入帳號為你當前的登入帳號,重啟服務。

第二個方法就是,採用登錄檔裡的公共部分,如loacl machine,只要與登入帳號無關的鍵就可以。

private void button3_click(object sender, eventargs e)

else

//關閉該物件

regread.close(); }

registry.classesroot 對應於hkey_classes_root主鍵

registry.currentuser 對應於hkey_current_user主鍵

registry.localmachine 對應於 hkey_local_machine主鍵

registry.user 對應於 hkey_user主鍵

registry.currentconfig 對應於heky_current_config主鍵

registry.dynda 對應於hkey_dyn_data主鍵

registry.performancedata 對應於hkey_performance_data主鍵

registrykey類封裝了對登錄檔的基本操作,包括讀取,寫入,刪除。其中讀取的主要函式有:

opensubkey ( string name )方法主要是開啟指定的子鍵。

getsubkeynames ( )方法是獲得主鍵下面的所有子鍵的名稱,它的返回值是乙個字串陣列。

getvaluenames ( )方法是獲得當前子鍵中的所有的鍵名稱,它的返回值也是乙個字串陣列。

getvalue ( string name )方法是指定鍵的鍵值。

寫入的函式有:

createsubkey(string name)方法是增加乙個子鍵

setvalue(string name,string value)方法是設定乙個鍵的鍵值

刪除的函式:

deletesubkey ( )方法:刪除乙個指定的子鍵。

deletesubkeytree ( )方法:

此方法是徹底刪除指定的子鍵目錄,即:刪除該子鍵以及該子鍵以下的全部子鍵。

1.ie視窗的動感效果

//-------------------------------------

//  changeie.cs ? 2004 by yudehui

//-------------------------------------

using system;

using microsoft.win32;  //對登錄檔操作一定要引用這個命名空間

namespace changeie

else

pregkey. close;  }

} }2.改變ie工具欄的背景

//-------------------------------------

//  changeie.cs ? 2004 by yudehui

//-------------------------------------

using system;

using microsoft.win32;  //對登錄檔操作一定要引用這個命名空間

namespace changeiebackcolor

else

pregkey.close; }

} }以下從『讀』『寫』『刪除』『判斷』四個事例實現對登錄檔的簡單操作 

1.讀取指定名稱的登錄檔的值 

private string getregistdata(string name)   

以上是讀取的登錄檔中hkey_local_machine/software目錄下的***目錄中名稱為name的登錄檔值; 

2.向登錄檔中寫資料 

private void wtregedit(string name,string tovalue)   

以上是在登錄檔中hkey_local_machine/software目錄下新建***目錄並在此目錄下建立名稱為name值為tovalue的登錄檔項; 

3.刪除登錄檔中指定的登錄檔項 

private void deleteregist(string name)   

} 以上是在登錄檔中hkey_local_machine/software目錄下***目錄中刪除名稱為name登錄檔項; 

4.判斷指定登錄檔項是否存在 

private bool isregeditexit(string name)   

} return _exit;  } 

以上是在登錄檔中hkey_local_machine/software目錄下***目錄中判斷名稱為name登錄檔項是否存

在,這一方法在刪除登錄檔時已經存在,在新建一登錄檔項時也應有相應判斷; 

服務登錄檔

包含服務 服務的例項和其位置資訊的資料庫。各服務例項需要在啟動時註冊至該服務登錄檔,並在關閉時進行登出。該服務的客戶端以及 或者路由器通過查詢此服務登錄檔來找到可用的服務例項。經常作為服務登錄檔使用的技術 eureka apache zookeeper consul etcd k8s maratho...

刪除登錄檔的服務

刪除的辦法有兩個 辦法一 用sc.exe這個windows命令 開始 執行 cmd.exe,然後輸入sc就可以看到了。使用辦法很簡單 sc delete 服務名 如果服務名中間有空格,就需要前後加引號 如針對上面的 sc delete ksd2service 方法二 直接進行登錄檔編輯 開啟登錄檔編...

VC 讀登錄檔獲取安裝程式

windows 系統中,安裝程式都可以在登錄檔hkey local machine software microsoft windows currentversion uninstall 獲取,並且xp vista win7 win8都一樣 開啟登錄檔命令 regedit,依次展開上述登錄檔路徑,安...