テスター (.cmd) を起動するアプリケーションを作成しているので、リストボックスに入力されたテストを渡しています。このメソッドは、入力されたテストが 1 つある場合は問題なく機能しますが、2 つ以上ある場合はエラーが発生します。
「タイプ 'System.ComponentModel.Win32Exception' の未処理の例外が System.dll で発生しました追加情報: システムは指定されたファイルを見つけることができません」
と両方StartInfo.Filename
がcurrentTestFromListbox[i]
デバッガーで正しく見えます。
私がどこで間違っているのか誰にも分かりますか?
私のコードが紛らわしいことをお詫び申し上げます-私はただの初心者です。
public void executeCommandFiles()
{
int i = 0;
int ii = 0;
int numberOfTests = listboxTestsToRun.Items.Count;
executeNextTest:
var CurrentTestFromListbox = listboxTestsToRun.Items.Cast<String>().ToArray();
string filenameMinusCMD = "error reassigning path value";
int fileExtPos = CurrentTestFromListbox[i].LastIndexOf(".");
if (fileExtPos >= 0)
{
filenameMinusCMD = CurrentTestFromListbox[i].Substring(0, fileExtPos);
}
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.Arguments = @"pushd Y:\Tests\" + filenameMinusCMD + @"\" + CurrentTestFromListbox[i];
startInfo.WorkingDirectory = @"pushd Y:\Tests\" + filenameMinusCMD + @"\";
startInfo.FileName = CurrentTestFromListbox[i];
Process.Start(startInfo);
//Wait for program to load before selecting main tab
System.Threading.Thread.Sleep(10000);
//Select MainMenu tab by sending a left arrow keypress
SendKeys.Send("{LEFT}");
i++;
if (i < numberOfTests)
{
checkIfTestIsCurrentlyRunning:
foreach (Process clsProcess in Process.GetProcesses())
{
if (clsProcess.ProcessName.Contains("nameOfProgramIAmTesting"))
{
System.Threading.Thread.Sleep(2000);
//if (ii > 150)
if (ii > 6) //test purposes only
{
MessageBox.Show("The current test (" + filenameMinusCMD + ") timed out at 5 minutes. The next test has been started.", "Test timed out",
MessageBoxButtons.OK,
MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1);
}
ii++;
goto checkIfTestIsCurrentlyRunning;
}
goto executeNextTest;
}
}
}
}
ありがとう!-ジョエル