Clickonceアプリケーションがあり、このアプリケーション用にいくつかのファイルハンドラーを設定しました(この例では、.aaa
または.bbb
拡張子のいずれかを持つファイルを処理します)。
これらの拡張子のいずれかを持つ単一のファイルを選択すると、アプリケーションは期待どおりに起動し、すべてが正常に機能します。しかし、複数のファイルを選択して(を押すEnterか、右クリックして[開く]を選択して)開くと、アプリケーションの複数のインスタンスが起動します(選択したファイルごとに1つのインスタンス)。
これは私が期待した動作ではありません。1つのインスタンスだけで、の複数のファイルエントリから開始する必要がありますAppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData
。これは達成できますか、それとも私の期待は正しくありませんか?
編集:
詳しく説明します。@ Matthiasで説明されているように、単一インスタンスのアプローチに従いました。最初に起動するインスタンスは、名前付きサーバーパイプを作成します。その後、後続のインスタンスが起動し、セカンダリであることを検出し、コマンドライン引数(ファイル名)を名前付きパイプを介してメインインスタンスに伝達し、終了します。メインインスタンスは名前付きパイプを介してファイル名を受け取り、その処理を実行します(ファイルインポートウィザードを起動します)。
この問題は、ユーザーが複数のファイル(つまり、5つのファイル)を選択してから、アプリケーションでそれらのファイルを開くことを選択した場合に発生します。コマンドラインで指定された5つのファイル名で始まる1つのセカンダリインスタンスを取得する代わりに、コマンドラインでそれぞれ1つのファイル名を持つアプリケーションの5つのセカンダリインスタンスを取得しています。次に、これらのそれぞれがパイプという名前のクライアントを作成し、そのファイル名をメインインスタンスに伝達します。したがって、パイプという名前のサーバーは5つの個別のメッセージを受信します。
フォローアップの考え:
これについてチャットした後、おそらくこれは登録されたファイルハンドラーの動作方法であり、clickonceとは関係がない可能性があります。おそらく解決策は、pipeという名前のサーバーが各メッセージを受信した後に一時停止し、メッセージを実行する前にメッセージをキューに入れようとすることですか?