如果我的应用程序崩溃,请确保我打开的进程将关闭

时间:2013-05-27 20:36:04

标签: c# windows

在我的应用程序中,我在打开Wireshark process之前检查我的文件,然后以这种方式添加到我的Listbox

protected string[] invokeProcess(WiresharkProcesses process, string args)
{
    string processToInvoke = null;
    validateProcess(process);

    switch (process)
    {
        case WiresharkProcesses.Capinfo:
            processToInvoke = Path.Combine(getbBasePath, "capinfos.exe");
            break;
        case WiresharkProcesses.Editcap:
            processToInvoke = Path.Combine(getbBasePath, "editcap.exe");
            break;
        case WiresharkProcesses.Tshark:
            processToInvoke = Path.Combine(getbBasePath, "tshark.exe");
            break;
        case WiresharkProcesses.Wireshark:
            processToInvoke = Path.Combine(getbBasePath, "wireshark.exe");
            break;
    }

    ProcessStartInfo capinfosProcess = new ProcessStartInfo(processToInvoke);
    capinfosProcess.Arguments = args;
    capinfosProcess.WindowStyle = ProcessWindowStyle.Hidden;
    capinfosProcess.RedirectStandardOutput = true;
    capinfosProcess.RedirectStandardError = true;
    capinfosProcess.CreateNoWindow = true;
    capinfosProcess.UseShellExecute = false;
    capinfosProcess.ErrorDialog = false;

    List<string> lineList = new List<string>();
    using (Process pros = Process.Start(capinfosProcess))
    {
        StreamReader reader = pros.StandardOutput;
        while (!reader.EndOfStream)
        {
            lineList.Add(reader.ReadLine());
        }

        pros.WaitForExit();
    }

    return lineList.ToArray();
}

private static string getbBasePath
{
    get
    {
        if (Directory.Exists(@"C:\Program Files (x86)\Wireshark"))
        {
            return @"C:\Program Files (x86)\Wireshark";
        }
        else
        {
            return @"C:\Program Files\Wireshark";
        }
    }
}

private void validateProcess(WiresharkProcesses process)
{
    switch (process)
    {
        case WiresharkProcesses.Capinfo:
            break;
        case WiresharkProcesses.Editcap:
            break;
        case WiresharkProcesses.Tshark:
            break;
        case WiresharkProcesses.Wireshark:
            break;
    }
}

}

当我检查这些文件时,我通过Thread执行此操作以防止我的Ui冻结,因此当我选择根文件夹时,很多进程在同一时间打开,如果我关闭我的应用程序中间所有这些过程都是开放的,这件事需要记忆力很大。 我该如何防止它发生?也许通过在单独的线程中打开此进程并将此线程配置为isBackground = true ?

0 个答案:

没有答案