2

Form1 ボタン クリック イベントに次の行があります。

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

このディレクトリの場所を開いているだけです。次に、別の行があります。

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

最初のボタンをクリックしてから 2 番目のボタンをクリックすると、プロセスごとに 2 つのウィンドウが開きます。

今、プログラムを閉じているので、Form1 の終了イベントで、この 2 つのプロセスを強制終了したいと考えています。

他の部分では、私は何をしますか?

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));

そして、それはうまくいったのに、なぜ今このエラーが発生したのですか?

4

2 に答える 2

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()の引数を1つ取るオーバーライドメソッド(インスタンスメソッド)はありませんstring。引数のないメソッドは 1 つだけStart()です。
  2. IDE は、タイプ名で を呼び出す必要があることを示します。これは、タイプ名であるのに対し、Start()呼び出す必要があることを意味します。これは、型名でのみ呼び出すことができる静的メソッドです。Process.Start(string ....)ProcessStart(string...)
于 2013-08-04T07:39:59.150 に答える
0

Process.Start はプロセス オブジェクトを返します。これをどこかに保存して、「はい」を選択した場合に Kill() を呼び出すことができます。したがって、次のようなものです:

Process _proc;

_proc = Process.Start("path);
_proc.Kill();
于 2013-08-04T07:39:52.760 に答える