0

ヘルプファイルを複数回開かないようにしています。これは私が使用している方法です:

    public void openHelp()
    {
        int count = 0;
        string helpPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + @"\MyApp\Help\eHelp.chm";

        System.Diagnostics.Process[] helpProcs = System.Diagnostics.Process.GetProcesses();
        foreach (System.Diagnostics.Process proc in helpProcs)
        {
            if (proc.MainWindowTitle == "Sample App Help")
            {
                count++;
            }
        }

        if (count == 0)
        {
            System.Diagnostics.Process.Start(helpPath);
        }
        else
        {
        }
    }

同じMainWindowTitleでプロセスを見つけた場合は、新しいプロセスを開始しないでください。ただし、これは信頼できません。場合によっては、すでに実行されていても、プロセスを開始します。ロジックに問題はありますか?

ありがとうございました。

PSもちろん、MainWindowTitleは「サンプルアプリヘルプ」です。少なくとも、デバッグ中に表示されるものです。

更新:問題は、ユーザーがヘルプファイルを最小化した場合にのみ発生します。したがって、システムで何かが発生しているのではないかと思い、何かをチェックする必要があります。助言がありますか?

4

1 に答える 1

4

Process.MainWindowTitleのRemarksセクションには、次の注記が含まれています。

メインウィンドウは、現在フォーカスがあるウィンドウです。これはプロセスのプライマリウィンドウではない可能性があることに注意してください。変更されている場合は、Refreshメソッドを使用してProcessオブジェクトを更新し、現在のメインウィンドウハンドルを取得する必要があります。

これがおそらくあなたの問題の原因でしょうか?

新しく開始したヘルプビューアのプロセスIDを保持し、別のヘルプビューアを開始する前に、古いものがまだ生きているかどうかを確認するのはどうでしょうか。

int id = ...

try
{
    var proc = Process.GetProcessById(id);
}
catch
{
    // no process running with that id
}
于 2012-12-07T10:36:38.310 に答える