日期:2014-05-18  浏览次数:21107 次

【100分】【WMI】【诡异】换了一种方式就拒绝访问?!
首先说明一下啊,用第一种方式可以正常工作,所以应该不存在权限问题吧
而且双方的计算机都没有开防火墙,所以希望大家不要瞎猜,要有理有据啊
C# code

void Button1Click(object sender, EventArgs e)
        {
            ManagementObjectSearcher mos=new ManagementObjectSearcher("select * from win32_logicaldisk");
            mos.Scope.Options.Username="xpclient";
            mos.Scope.Options.Password="MZD";
            mos.Scope.Path.Server="192.168.1.15";

                        //调用这个无惨的Get方法可以

            foreach(ManagementObject mo in mos.Get())
            {
                MessageBox.Show(mo["name"].ToString());
            }
            

                        //下面这种方法居然就拒绝访问了

            ManagementOperationObserver moo=new ManagementOperationObserver();
            moo.ObjectReady+= delegate(object ssender, ObjectReadyEventArgs se)
            {
                MessageBox.Show(se.NewObject["name"].ToString());
            };
                        //在Get方法这里抛出异常,拒绝访问,是异步调用的原因吗?
            mos.Get(moo);


                        //如果是本机计算机,两种方式都成功了
        }



------解决方案--------------------
使用ConnectionOptions来设置连接:
C# code

ConnectionOptions. connection_wmi = new ConnectionOptions();
connection_wmi.Username = "";
connection_wmi.Password = "";
connection_wmi.Authority = "ntlmdomain:DOMAIN";

------解决方案--------------------
打错了,纠正一下:
C# code
ConnectionOptions connection_wmi = new ConnectionOptions();
connection_wmi.Username = "";
connection_wmi.Password = "";
connection_wmi.Authority = "ntlmdomain:DOMAIN";

------解决方案--------------------
moo是否也应该有:
moo.Scope.Options.Username="xpclient";
moo.Scope.Options.Password="MZD";
moo.Scope.Path.Server="192.168.1.15";

另外:connection_wmi.Authority = "ntlmdomain:DOMAIN";
在NT系统下是需要的。
------解决方案--------------------
探讨
不是你这个问题,你这样解决不了问题
connection_wmi.Authority = "ntlmdomain:DOMAIN";有没有这句是一样的
我知道你是在网上找的这句,这是以讹传讹,解决不了问题

------解决方案--------------------
mark