五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > System.Management.ManagementException: 訪問遭到拒絕的解決方案

System.Management.ManagementException: 訪問遭到拒絕的解決方案

文章來源:365jz.com     點(diǎn)擊數(shù):2404    更新時(shí)間:2009-09-21 11:05   參與評(píng)論

前幾天在開發(fā)中弄了一個(gè)產(chǎn)品注冊(cè)機(jī)制,然后要獲取硬件的相關(guān)參數(shù),比如:網(wǎng)卡MAC地址,CPUID等,當(dāng)程序?qū)懲炅?,在本地調(diào)式一點(diǎn)問題也沒有,但是傳到服務(wù)器上問題就來了,程序錯(cuò)誤:
System.Management.ManagementException: 訪問遭到拒絕 在 System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode) 在 System.Management.ManagementScope.InitializeGuts(Object o) 在 System.Management.ManagementScope.Initialize() 在 System.Management.ManagementObject.Initialize(Boolean getObject) 在 System.Management.ManagementClass.GetInstances(EnumerationOptions options) 在 System.Management.ManagementClass.GetInstances() 在 ManagementTest.Class1.GetCpuId()

從信息中得知,是下面代碼處出了問題:
            ManagementClass mc = new ManagementClass("Win32_Processor");
            ManagementObjectCollection moc = mc.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                CPUID= mo.Properties["ProcessorId"].Value.ToString();
                break;
            }
貌似是運(yùn)行。net的權(quán)限不足。導(dǎo)致asp.net進(jìn)程無法訪問System.Management類。(其實(shí)不是的,先鄙視一下亂下結(jié)論的人,呵呵?。?br />郁悶中在百度上百度了一下,找到一條消息(http://wiki.supesoft.com/(X(1)S(4ukvvj3nsjwvlninzlvozl3z))/Default.aspx?Page=FrameWork-ManagementException&NoRedirect=1&AspxAutoDetectCookieSupport=1):從上面看來是否是沒有錯(cuò)誤處理,但是往下一看,并非如此,他把CPUID換成程序跟目錄了。貌似也是唯一的,暫時(shí)可用。
后來問題有來了,輸入的注冊(cè)嗎怎么也不對(duì),經(jīng)過研究得知并非是asp.net進(jìn)程權(quán)限不足問題。

解決方案:
原理:頁面(與IIS有關(guān))運(yùn)行的權(quán)限低于DLL運(yùn)行的權(quán)限,估計(jì)是微軟考慮到什么黑客會(huì)利用此漏洞而設(shè)計(jì)的。只要在運(yùn)行頁面前把這個(gè)值獲取就沒問題。
結(jié)果整理了一下,完整代碼如下:
 /// <summary>
        /// 獲取CPUID
        /// </summary>
        /// <returns></returns>
        public static string GetCpuId()
        {
            string cpuId = null;
            ManagementClass mClass = new ManagementClass("Win32_Processor");
            try
            {
                ManagementObjectCollection moc = mClass.GetInstances();

                foreach (ManagementObject mo in moc)
                {
                    cpuId = mo.Properties["ProcessorId"].Value.ToString();
                    break;
                }
            }
            catch (Exception ex)
            {
                cpuId =ex.ToString();
            }
            if (System.Web.HttpContext.Current.Application["CPUID"] == null)
            {
                System.Web.HttpContext.Current.Application.Lock();
                System.Web.HttpContext.Current.Application["CPUID"] = cpuId;
                System.Web.HttpContext.Current.Application.UnLock();
            }
            return cpuId;
        }

在頁面調(diào)用CPUID值: System.Web.HttpContext.Current.Application["CPUID"].ToString();
運(yùn)行的前提是必須把這個(gè)代碼在頁面執(zhí)行前運(yùn)行,如加在 httpModules 里程序一開始就先執(zhí)行這個(gè)代碼。

最后貼上運(yùn)行效果:

--------------頁面調(diào)用前開始--------------
CPUID值:BFEBFBFF00000F29
--------------頁面調(diào)用前結(jié)束--------------

--------------頁面調(diào)

用開始--------------
CPUID值:System.Management.ManagementException: 訪問遭到拒絕 在 System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode) 在 System.Management.ManagementScope.InitializeGuts(Object o) 在 System.Management.ManagementScope.Initialize() 在 System.Management.ManagementObject.Initialize(Boolean getObject) 在 System.Management.ManagementClass.GetInstances(EnumerationOptions options) 在 System.Management.ManagementClass.GetInstances() 在 ManagementTest.Class1.GetCpuId()
--------------頁面調(diào)用結(jié)束--------------

下面是測(cè)試的例子,碰到此問題的朋友可以下載去測(cè)試一下就明白了。
點(diǎn)擊下載

如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇

發(fā)表評(píng)論 (2404人查看,0條評(píng)論)
請(qǐng)自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱:
最新評(píng)論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)