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 \デバイス\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 は文字列の長さより大きくすることはできません

outputこれは、変数が少なくとも 182 文字を持っていないためです。

于 2013-10-09T09:02:36.583 に答える
0

getmacこれは、コマンドによって返される形式の影響を受けやすいため、MAC アドレスを取得する良い方法ではありません。この質問getmacへの回答で概説されている手法を呼び出したり、使用したりしないことをお勧めします

于 2013-10-09T09:04:27.140 に答える