System.ArgumentOutOfRangeException:startIndex不能大于部署期间发生的字符串长度

时间:2013-10-09 08:52:40

标签: c# asp.net string

我正在研究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

2 个答案:

答案 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

的答案中列出的技巧