我怎么能杀死两个进程?

时间:2013-08-04 07:36:53

标签: c# winforms

我在Form1按钮点击事件这行:

Process.Start(Path.GetFullPath(zippedFileDirectory));

它只是打开这个目录的位置。 然后我有另一条线:

Process.Start(Path.GetFullPath(temp));

如果我点击第一个按钮,然后点击第二个按钮,我会在每个过程中打开两个窗口。

现在我正在关闭我的程序,所以在Form1结束事件中,我想杀死这两个进程。

在其他部分我该怎么办?

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (MessageBox.Show("Are you Sure you want to Exit. Click Yes to Confirm and No to continue", "WinForm",
                         MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
    {
         e.Cancel = true;
    }
    else
    {

    }
}

编辑:

我现在在我的Form1上添加了:

private Process zipFileDirectoryProcess;

然后在我做的方法的底部:

private void Compress()
{
    string zipFileName = "Diagnosis_Files.zip";
    string source = contentDirectory;
    string output = zippedFileDirectory;
    string programFilesX86 = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFilesX86) 
                                                     + "\\Diagnostic Tool\\7z.dll";
    if (File.Exists(programFilesX86))
    {
        SevenZipExtractor.SetLibraryPath(programFilesX86);
    }
    string programFiles = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles) 
                                 + "\\Diagnostic Tool\\7z.dll";
    if (File.Exists(programFiles))
    {
        SevenZipExtractor.SetLibraryPath(programFiles);
    }
    SevenZipCompressor compressor = new SevenZipCompressor();
    compressor.ArchiveFormat = OutArchiveFormat.Zip;
    compressor.CompressionMode = CompressionMode.Create;
    compressor.TempFolderPath = System.IO.Path.GetTempPath();
    string t = Path.Combine(output, zipFileName);
    compressor.CompressDirectory(source, t);
    zipFileDirectoryProcess.Start(Path.GetFullPath(zippedFileDirectory));
    this.TopMost = true;
}

我添加了一行:

zipFileDirectoryProcess.Start(Path.GetFullPath(zippedFileDirectory));

但我在这一行上收到错误:

Error 1 Member 'System.Diagnostics.Process.Start(string)' cannot be accessed with an instance reference; qualify it with a type name instead

在我添加这一行之前,我有这一行:

Process.Start(Path.GetFullPath(zippedFileDirectory));

它运作良好,为什么现在我有这个错误?

2 个答案:

答案 0 :(得分:2)

Process p1 = Process.Start(Path.GetFullPath(zippedFileDirectory));
Process p2 = Process.Start(Path.GetFullPath(temp));
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (MessageBox.Show("Are you Sure you want to Exit. Click Yes to Confirm and No to continue", "WinForm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
        {
            e.Cancel = true;
        }
        else
        {
           p1.Kill();
           p2.Kill();
        }
    }

更新

对于您添加的问题,您无法在Start()的实例上调用Process方法,因为:

  1. Start()没有重写方法(实例方法)采用string的1个参数。只有一种方法没有任何参数Start()
  2. IDE说您应该在类型名称上调用Start(),这意味着您应该调用Process.Start(string ....),而Process是类型名称。这个Start(string...)是一个静态方法,只能在类型名称上调用。

答案 1 :(得分:0)

Process.Start返回一个进程对象。您可以将其存储在某处,然后如果选择是,则在其上调用Kill()。所以,像:

Process _proc;

_proc = Process.Start("path);
_proc.Kill();