【问题标题】:get MAC address through Silverlight 4通过 Silverlight 4 获取 MAC 地址
【发布时间】:2011-07-07 14:39:09
【问题描述】:
【问题讨论】:
标签:
silverlight-4.0
ip-address
mac-address
【解决方案1】:
使用这个来自this link的代码示例(这个问题也提到了 here)。
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);
}
}
}
【解决方案2】:
Silverlight 的安全模型使您无法从浏览器沙箱之外的客户端计算机访问任何内容,并且分配给隔离存储的(少量)磁盘空间。客户端机器的 MAC 地址属于该类别。但是,您可以使用提升的权限运行您的应用程序“Out of Browser”(OOB),这就是该测试正在检查的内容。
第一个条件表明您必须用尽浏览器 - 所以第一个问题是“您的应用程序是否已启用 OOB 并用尽了浏览器?”。
如果不是,那么测试将失败。
然后,如果应用程序正在运行 OOB,它还必须以提升的权限运行。是这样吗?
至于 AutomationFactory 测试 - this post 上的答案暗示当应用程序用完具有提升权限的浏览器时它会是真的。