我正在研究ASP.NET 4.0和Visual Studio 2010.在我的Web项目中,我运行一个命令进程来获取系统的物理地址并处理结果并将其分配给字符串变量并执行String变量的子字符串仅在我的localhost中它正在运行,但是当我部署它时,我得到 System.ArgumentOutOfRangeException:startIndex不能大于字符串的长度。 exception。我试过的代码是,
string command = "getmac";
Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/c " + command);
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardOutput = true;
process.StartInfo = startInfo;
process.Start();
string mac = "";
string output = process.StandardOutput.ReadToEnd();
if (!string.IsNullOrEmpty(output))
{
mac = output.Substring(162, 20).Trim();
}
process.WaitForExit();
if (!string.IsNullOrEmpty(mac))
{
mactxtbox.Text = mac;
}
修改
以下是我的输出变量
物理地址传输名称
=================== =============================== ===========================
00-00-00-00-00-00 \ Device \ Tcpip_ {00000000-0000-0000-0000-000000000000}
我想要的只是物理地址,格式为00-00-00-00-00-00
答案 0 :(得分:0)
尝试添加:
if (!string.IsNullOrEmpty(output) && output.Lenght >= (162+20))
{
mac = output.Substring(162, 20).Trim();
}
如果您阅读了例外情况,它会告诉您什么是错误的:
System.ArgumentOutOfRangeException:startIndex不能大于 字符串的长度
和我是因为output
可变的doenst至少有182个字符
答案 1 :(得分:0)
这不是获取MAC地址的好方法,因为它对getmac
命令返回的格式很敏感。我建议不要呼叫getmac
并使用this question