(最初: これは他の多くの質問と非常に似ていることはわかっていますが、他では見たことのない二次的な要件があります。)
ユーザーがファイルに対して何らかの作業を行うことができるアプリを作成しています (メタデータの調整、別の場所への送信、将来的にはその他の作業)。多くの場合、同じアクションが一度に多くのファイルに発生するため、ユーザーが複数のファイルを選択している場合、右クリックして何らかのアクションを使用できるようにする必要があります。そのコンテキスト メニューと、選択したすべてのファイルとフォルダーが一括処理のためにアプリに渡されます。
ここで注意が必要な点があります。ユーザーが 1 つのファイル セットに対してこの一括処理を実行しているときに、別のファイル セットを選択して別の一括処理アクションを設定する可能性があるため、2 つのバッチを別々にしておく必要があります。最初のバッチで実行されたアクションは、2 番目のバッチには適切ではない可能性があります。
その 2 番目の要件は、私が問題に直面しているところです。2 つのバッチが 1 つのバッチにまとめられ、ユーザーにとって非常に悪いこと (tm) になるため、通常のシングルトンだけを実行することはできません。しかし、これまでのところ、ファイルの 1 つのバッチを 1 つのインスタンスで開き、後のバッチを新しいインスタンスで開くエレガントな方法を見つけられませんでした。
いくつかのオプションを思いつきました...まず、アプリの起動時に他のインスタンスを検索し、それぞれのインスタンスと順番に通信して、いつ開始されたかを調べ、時間が十分に近い場合は閉じることができます古いインスタンスを優先して、このインスタンスをダウンさせます。2 番目のオプションは、一意の操作識別子をコマンド ライン引数に追加することです。最初のオプションと同様に、アプリが起動すると、それ自体の他のインスタンスを探して、マスターであるインスタンスを見つけようとします (おそらく、ミューテックス名の一部として識別子を使用して、どれが最初であるかを簡単に把握できるようにします) . 別のオプションとして、シェル拡張機能を作成してリストをまとめ、そのリストを一度にアプリに渡すこともできます (正直に言うと、これが機能するかどうかはわかりません...)。
私が思いついたアイデアのうち、#2 がうまくいくなら間違いなく私の好みです。すべてのコードが C# に保持されるため、チームの誰もがコードを維持できます。また、コマンドを確実にバッチにグループ化する方法も提供されます。唯一の問題は、単一の右クリック アクションからアプリを起動しようとするすべての試行で一貫しているが、ユーザーが別の右クリック+開く(または何でも)。たぶん、シェル拡張機能を介してそれを行うことができます...?
これを実現する方法について何か提案があれば、本当に感謝しています。私は、ソリューションへの道をハックする必要がある場合に最終的に陥りがちな中国のブルインショップタイプのコードよりも、保守が容易な合理的にエレガントで堅牢なソリューションを好みます。