Silverlight 4.0 通过Silverlight 4获取MAC地址

Silverlight 4.0 通过Silverlight 4获取MAC地址,silverlight-4.0,ip-address,mac-address,Silverlight 4.0,Ip Address,Mac Address,我试过这么做- 但这三个条件总是错误的: if ((Application.Current.IsRunningOutOfBrowser) && (Application.Current.HasElevatedPermissions) && (AutomationFactory.IsAvailable)) 我想这是因为权限和安全性的原因。。 有什么方法可以从客户端获取物理IP地址吗? 正如我所说,我使用Silverlight4 Silverlight的安全

我试过这么做-

但这三个条件总是错误的:

if ((Application.Current.IsRunningOutOfBrowser) && 

(Application.Current.HasElevatedPermissions) && 
(AutomationFactory.IsAvailable))
我想这是因为权限和安全性的原因。。 有什么方法可以从客户端获取物理IP地址吗?
正如我所说,我使用Silverlight4

Silverlight的安全模型是这样的:您无法从浏览器沙箱之外的客户机以及分配给独立存储的(少量)磁盘空间访问任何内容。客户端计算机的MAC地址将属于该类别。但是,您可以使用提升的权限“脱离浏览器”(OOB)运行您的应用程序,这是本测试要检查的

第一个条件说明您必须用完浏览器,所以第一个问题是“您的应用程序是否启用了OOB,并且没有broswer?”

否则,测试将失败

然后,如果应用程序正在运行OOB,那么它也必须以提升的权限运行。是这样吗


至于AutomationFactory测试-上的答案意味着当应用程序使用提升权限的浏览器时,它将为真。

使用来自的代码示例(也提到了该问题)

public partial class MyClient : UserControl
{
    public MyClient()
    {
        MACAddressManager macAddressManager = new MACAddressManager();
        macAddressManager.OnGetMACAddressCompleted += new EventHandler(macAddressManager_OnGetMACAddressCompleted);
        macAddressManager.BeginGetMACAddress();
    }

    void macAddressManager_OnGetMACAddressCompleted(object sender, EventArgs e)
    {
        MACAddressManager manager = (MACAddressManager) sender;
        // MAC Address  value is in manager.MACAddress
    }
  }

  public class MACAddressManager
  {
    private dynamic sWbemServices;
    private dynamic sWbemSink;

    public string MACAddress { get; private set; }
    public event EventHandler OnGetMACAddressCompleted;

    private void EndGetMACAddress(object sender, EventArgs e)
    {
        dynamic objWbemObject = sender;
        MACAddress = objWbemObject.MACAddress;
        if (OnGetMACAddressCompleted != null)
            OnGetMACAddressCompleted(this, EventArgs.Empty);
    }

    public void BeginGetMACAddress()
    {
        if ((Application.Current.IsRunningOutOfBrowser) && (Application.Current.HasElevatedPermissions) && (AutomationFactory.IsAvailable))
        {
            dynamic sWbemLocator = AutomationFactory.CreateObject("WbemScripting.SWBemLocator");
            sWbemServices = sWbemLocator.ConnectServer(".");
            sWbemServices.Security_.ImpersonationLevel = 3; //impersonate

            sWbemSink = AutomationFactory.CreateObject("WbemScripting.SWbemSink");
            sWbemSink.OnObjectReady += new EventHandler(EndGetMACAddress);

            string query = "SELECT * FROM Win32_NetworkAdapterConfiguration where IPEnabled=true";
            sWbemServices.ExecQueryAsync(sWbemSink, query);
        }
    }
}