私の小さなアプリケーションに深刻な問題があります。基本的に理解するのが非常に簡単です:同じアプリケーションの別のインスタンスに引数を渡す
私のソフトウェアは、開かれたとき、それはものですか?
私は別のインスタンスを開くことに集中したいと思います(また、.exeをもう一度開くことを意味します)、既に開いているかどうかを確認してください。単純にアプリケーションを起動するのではなく、すでに実行中の場合(2番目以上のインスタンス)には、入力引数(args文字列配列)を最初のインスタンスに渡すだけで適切に処理されます。ここで
は、それがすでにそれがメインインスタンスには何も通信できない(オフコース)開かれたが、だ場合にのみ(ミューテックスを)認識して、私のProgram.cs
static class Program
{
static Mutex mutex = new Mutex(true, "{blabla}");
[STAThread]
static void Main(String[] args)
{
if (mutex.WaitOne(TimeSpan.Zero, true))
{
//First Instance!
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
CALL A MY STATIC METHOD, DO SOME THINGS
Application.Run(new Form1());
}
finally
{
mutex.ReleaseMutex();
}
}
else
{
//Not-so-first instance!
CALL A STATIC METHOD,
DO OTHER THINGS LIKE COMUNICATE WITH FIRST INSTANCE
SIMPLY CLOSE.
}
}
}
です。
私は多くのことを試しましたが、うまく動作しません。
私はthisを試しましたが、私は「最初の時間」のコードと「既に実行中の」コードをどのように入れておくのが大したことではありません。
も試してみましたが、MSMQでも試してみました。
誰かお手伝いできますか?非常に基本的なことをする基本的なソフトウェアですが、私はそれを私が望むように動作させるために過ごしました!
2番目のインスタンスが別のプロセスで実行されています。何らかの通信メカニズム(MSMQ、ソケットを介したシリアル化など)を実装する必要があります。「静的」なものを作成することはできません。同じ実行可能ファイルの複数のコピーを実行しているという事実は、異なるアプリケーション間の通信よりも問題を単純化するものではありません。 –
不幸にも、同じ実行可能プログラムであっても、別のプログラムとのやりとりが容易ではないということを今日学んだことがあります。私は、すべてのものを静的にするよりも、異なるコピーを別に管理しなければならないことを理解しています静的メソッドは、私はそれを別の.csファイルの中に書いて、それは私のプログラムのロジックで使用されています:質問にはあまり関係はありません:) –