Process.Start()导致错误消息:参数不能为空

时间:2015-02-05 15:33:01

标签: c# process mstest

启动流程对象会导致显示消息框的消息框:

*

  

参数不能为空。参数名称:来源

*

因此,即使我的应用程序没有发现任何异常,我的代码执行也会暂停。

我认为文件的文件路径可能太长了。 所以我提供了一个更短的路径并将所有文件复制到该目录。但是,我仍有同样的问题。

一旦我执行" process.Start()" ,就会出现问题。

代码:

private void RunTests(ref int passingTests, ref int totalTests, ref int failedTests)
{
    var fileName = Path.GetFileName(TEST_DLL_PATH);
    var copiedFile = Path.Combine(TEMP_DIRECTORY_PATH, fileName);

    //Now Create all of the directories
    foreach (string dirPath in Directory.GetDirectories(TEST_DLL_DIRECTORY_PATH, "*",
        SearchOption.AllDirectories))
        Directory.CreateDirectory(dirPath.Replace(TEST_DLL_DIRECTORY_PATH, TEMP_DIRECTORY_PATH));

    //Copy all the files & Replaces any files with the same name
    foreach (string newPath in Directory.GetFiles(TEST_DLL_DIRECTORY_PATH, "*.*",
        SearchOption.AllDirectories))
        File.Copy(newPath, newPath.Replace(TEST_DLL_DIRECTORY_PATH, TEMP_DIRECTORY_PATH), true);

    var process = new Process
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = @"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\mstest.exe",
            Arguments = string.Format(@"/testcontainer:""{0}"" /resultsfile:""{1}""", copiedFile, TEMP_DIRECTORY_PATH),
            UseShellExecute = false,
            RedirectStandardOutput = true,
            CreateNoWindow = true
        }
    };

    process.Start();

    while (!process.StandardOutput.EndOfStream)
    {
        var line = process.StandardOutput.ReadLine();

        if (line.Contains("test(s) Passed") || _count % 5 == 0)
        {
            var parts = line.Split('/');
            passingTests = int.Parse(parts[0]);
            totalTests = int.Parse(parts[1].Split(' ')[0]);
            failedTests = totalTests - passingTests;
            break;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

事实证明,通过我的进程正在运行的单元测试执行的DLL正在抛出异常的GUI对话框。

我最终创建了一个可单元测试的交互界面来处理基于UI与测试自动化的错误消息。