0

我正在研究 ASP.NET 4.0 和 Visual Studio 2010。在我的 Web 项目中,我正在运行一个命令进程来获取系统的物理地址并处理结果并将其分配给字符串变量并执行字符串变量的子字符串以获得仅期望结果。在我的本地主机中,它工作正常,但是当我部署它时,我得到System.ArgumentOutOfRangeException:startIndex 不能大于字符串的长度。异常。我尝试的代码是,

   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 的物理地址

4

2 回答 2

0

尝试添加这个:

   if (!string.IsNullOrEmpty(output) && output.Lenght >= (162+20))
   {
      mac = output.Substring(162, 20).Trim();
   }

如果您阅读异常,它会准确地告诉您出了什么问题:

System.ArgumentOutOfRangeException:startIndex 不能大于字符串的长度

和 tis i 因为该output变量至少有 182 个字符

于 2013-10-09T09:02:36.583 回答
0

这不是获取 MAC 地址的好方法,因为它对getmac命令返回的格式很敏感。我建议不要调用getmac并使用该问题的答案中概述的技术

于 2013-10-09T09:04:27.140 回答