2017-06-15 9 views
3

私は、dotnetcoreコンソールアプリケーション用の単一インスタンスポリシーをどのようにしたらよいか興味があります。私の驚きには、トピックにはあまり出ていないようです。私はこの1つのstacko、How to restrict a program to a single instanceを見つけましたが、それはubuntuでdotnetcoreで私のために働くようです。誰でもここでこれをやっていますか?でLinux上のシングルインスタンスdotnetcore cliアプリケーション

+0

はMacOSの上で十分ではありませんだけでなく(それをテストしました)。何らかのpidfileを試してみると、メインプロセスが終了したときにファイルが常に削除されるようにする必要があります。 – dbattaglia

+1

これまで私はそれを考えましたが、より良い方法を望んでいます。 – Theyouthis

答えて

1

変動@のMusuNajiのソリューション:それは名前付きミューテックスを使用してのように思えるHow to restrict a program to a single instance

private static bool AlreadyRunning() 
    { 
     Process[] processes = Process.GetProcesses(); 
     Process currentProc = Process.GetCurrentProcess(); 
     logger.LogDebug("Current proccess: {0}", currentProc.ProcessName); 
     foreach (Process process in processes) 
     { 
      if (currentProc.ProcessName == process.ProcessName && currentProc.Id != process.Id) 
      { 
       logger.LogInformation("Another instance of this process is already running: {pid}", process.Id); 
       return true; 
      } 
     } 
     return false; 
    } 
+0

これについて考えると、プロセス名が一意でない場合、これはうまくいきません。それがこの解決策の前提条件です。 1つのインスタンスポリシーを100%信頼できる方法で表示します。 – Theyouthis

+0

私の場合、単一のインスタンスポリシーを達成する最良の方法は、それをLinuxデーモンにすることです。私は少なくとも新興市場では、シングルインスタンスが私のデフォルトを実施すると思う。 – Theyouthis

関連する問題