我在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));
它运作良好,为什么现在我有这个错误?
答案 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
方法,因为:
Start()
没有重写方法(实例方法)采用string
的1个参数。只有一种方法没有任何参数Start()
。Start()
,这意味着您应该调用Process.Start(string ....)
,而Process
是类型名称。这个Start(string...)
是一个静态方法,只能在类型名称上调用。答案 1 :(得分:0)
Process.Start返回一个进程对象。您可以将其存储在某处,然后如果选择是,则在其上调用Kill()。所以,像:
Process _proc;
_proc = Process.Start("path);
_proc.Kill();