狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

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

admin
2021年2月16日 22:36 本文熱度 3927
獲取下面所有字符串值:
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;
    //獲取注冊表路徑
    RegeditKey regeditKey = TaxSoftwareBaseInfo.GetRealyTrueRegeditPath(WindowsInfo.GetWindowsVersion());
    RegistryKey regSubKey = null;
    //獲取驅動路徑
    regSubKey = regeditKey.Registry.OpenSubKey(@"System\CurrentControlSet\Control\Print\Printers\", false);
    string[] rk = regSubKey.GetSubKeyNames();
    foreach (var item in rk)
    {
        //這里就是要判斷讀取注冊表的值
    }
}

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

全部評論1

admin
2021年2月16日 22:46
 

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


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

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



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

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

         那么如何解決這個BUG呢?

         讀者可能試圖這樣做:

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

         目的是強制把參數轉換成32位有符號數,這樣是不行的,同樣提示異常,因為ffffffff已經超出了有符號32位數的表示范圍,無法轉換。

         或者這樣做:

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

         目的是把參數強制轉換成無符號32位表示,這樣同樣不行,SetValue方法內部會自動把參數轉換成有符號32位表示,因此,我們的轉換是徒勞的,還會被轉換回去,而轉換回去后,又會提示超出范圍。

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

1.  Int32 tempInt = 0; //預先定義一個有符號32位數

3.  //unchecked語句塊內的轉換,不做溢出檢查

4.  unchecked

5.  {

6.      tempInt = Convert.ToInt32("ffffffff", 16); //強制轉換成有符號32位數

7.  }

9.  //此時的tempInt已經是有符號32位數,可以直接寫入注冊表

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


         這樣轉折一下,就可以成功寫入注冊表了。

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