LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

c#怎么循環(huán)讀取注冊(cè)表某目錄下所有的子鍵/字符串值名稱

admin
2021年2月16日 22:36 本文熱度 4998
獲取下面所有字符串值:
private void button1_Click(object sender, EventArgs e)
{
    RegistryKey rk = Registry.CurrentUser.OpenSubKey("SOFTWARE\\MICROSOFT\\INTERNET EXPLORER\\MAIN");
    if(rk != null)
    {
        foreach (string vname in rk.GetValueNames())
        {
            if (rk.GetValueKind(vname) == RegistryValueKind.String)  //這里判斷類型RegistryValueKind.DWord
            {
                Text1.Text = Text1.Text + "\r\n" + vname + ":" + rk.GetValue(vname);
            }
        }
        rk.Close();
    }
}

獲取下面所有子鍵值:
public static bool IsAisino()
{
    bool IsAisino = false;
    //獲取注冊(cè)表路徑
    RegeditKey regeditKey = TaxSoftwareBaseInfo.GetRealyTrueRegeditPath(WindowsInfo.GetWindowsVersion());
    RegistryKey regSubKey = null;
    //獲取驅(qū)動(dòng)路徑
    regSubKey = regeditKey.Registry.OpenSubKey(@"System\CurrentControlSet\Control\Print\Printers\", false);
    string[] rk = regSubKey.GetSubKeyNames();
    foreach (var item in rk)
    {
        //這里就是要判斷讀取注冊(cè)表的值
    }
}

該文章在 2021/2/18 15:34:33 編輯過

全部評(píng)論1

admin
2021年2月16日 22:46
 

C#操作注冊(cè)表REG_DWORD類型鍵異常(RegistryValueKind.DWord異常)解決方案


         在用C#操作注冊(cè)表時(shí),如果注冊(cè)表鍵的類型是REG_DWORD,有可能遇到溢出BUG。網(wǎng)上這方面的資料很少,在這共享一下。

         C#可以用RegistryKey類的SetValue方法來設(shè)置鍵值,例如:



         看起來一切正常,但是這個(gè)RegistryValueKind.DWord是有問題的。

         注冊(cè)表中的REG_DWORD是無符號(hào)32位數(shù)值,而C#中的RegistryValueKind.DWord是有符號(hào)32位數(shù)值。這就意味著RegistryValueKind.DWord的表示范圍比REG_DWORD小,因此導(dǎo)致直接傳入一些大數(shù)時(shí)會(huì)拋出異常提示類型不正確。

         那么如何解決這個(gè)BUG呢?

         讀者可能試圖這樣做:

         openKey.SetValue("NoViewOnDrive",Convert.ToInt32("ffffffff",16), RegistryValueKind.DWord);

         目的是強(qiáng)制把參數(shù)轉(zhuǎn)換成32位有符號(hào)數(shù),這樣是不行的,同樣提示異常,因?yàn)閒fffffff已經(jīng)超出了有符號(hào)32位數(shù)的表示范圍,無法轉(zhuǎn)換。

         或者這樣做:

         openKey.SetValue("NoViewOnDrive",Convert.ToUInt32 ("ffffffff",16), RegistryValueKind.DWord);

         目的是把參數(shù)強(qiáng)制轉(zhuǎn)換成無符號(hào)32位表示,這樣同樣不行,SetValue方法內(nèi)部會(huì)自動(dòng)把參數(shù)轉(zhuǎn)換成有符號(hào)32位表示,因此,我們的轉(zhuǎn)換是徒勞的,還會(huì)被轉(zhuǎn)換回去,而轉(zhuǎn)換回去后,又會(huì)提示超出范圍。

         其實(shí),解決這個(gè)問題的方法很簡單,只要把轉(zhuǎn)換過程放在unchecked語句里就行了,unchecked語句塊內(nèi)的轉(zhuǎn)換,不做溢出檢查,溢出了直接用補(bǔ)碼表示。例如:

1.  Int32 tempInt = 0; //預(yù)先定義一個(gè)有符號(hào)32位數(shù)

3.  //unchecked語句塊內(nèi)的轉(zhuǎn)換,不做溢出檢查

4.  unchecked

5.  {

6.      tempInt = Convert.ToInt32("ffffffff", 16); //強(qiáng)制轉(zhuǎn)換成有符號(hào)32位數(shù)

7.  }

9.  //此時(shí)的tempInt已經(jīng)是有符號(hào)32位數(shù),可以直接寫入注冊(cè)表

10openKey.SetValue("NoViewOnDrive", tempInt, RegistryValueKind.DWord);


         這樣轉(zhuǎn)折一下,就可以成功寫入注冊(cè)表了。

該評(píng)論在 2021/2/16 22:46:06 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
日韩欧美综合在线 | 日韩一区二区三区久久综合 | 中文字幕日本有码视频在线 | 中文字字幕在线综合亚洲 | 日本人妖一区视频 | 一区二区三区中文字幕在线 |