2017-12-15 22 views
0

.net 4.5 및 Main 클래스의 뮤텍스를 사용하여 단일 인스턴스 WinForm 응용 프로그램을 개발했습니다. 일부 사용자는 뮤텍스가 이미 사용 되었기 때문에 응용 프로그램을 시작할 수 없다고보고합니다.단일 인스턴스 응용 프로그램이 시작되지 않음

static string guid = ((GuidAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(GuidAttribute), true)[0]).Value + "-OrientalWave"; 
    public static string GUID { get { return guid; } } 

    [STAThread] 
    static void Main(string[] args) 
    { 
     AppDomain currentDomain = AppDomain.CurrentDomain; 
     currentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionHandler); 

     // Single Instance Check 
     bool createdNew; 
     using (var mutex = new Mutex(true, guid, out createdNew)) 
     { 
      if (createdNew) 
      { 
       Application.EnableVisualStyles(); 
       Application.SetCompatibleTextRenderingDefault(false); 
       if (args.Length > 0) 
       { 
        string filename = args[0]; 
        Application.Run(new frmMain(filename)); 
       } 
       else 
        Application.Run(new frmMain()); 
      } 
      else 
      { 
       if (args.Length > 0) 
       { 
        // If i want to open a file 
        string filename = args[0]; 

        NamedPipesClient pipeClient = new NamedPipesClient(); 
        pipeClient.Start(); 
        pipeClient.SendMessage(filename); 
        pipeClient.Stop(); 
       } 
       else 
        MessageBox.Show("Only single instance allowed", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 
    } 

    static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs args) 
    { 
     try 
     { 
      var exception = (Exception)args.ExceptionObject; 
      MessageBox.Show(exception.Message, null, MessageBoxButtons.OK, MessageBoxIcon.Error); 
      Logger.Write(Logger.LogType.Error, exception.Source, "Message: " + exception.Message + " - Stack: " + exception.StackTrace); 
     } 
     catch { } 
     Environment.Exit(0); 
    } 

단일 인스턴스 응용 프로그램을 만들지 만 성공하지 못했던 대안이나 대안을 웹에서 검색했습니다.

+1

앱의 기능 것을 만들어 유사한 사용 사례를 찾을 수 있습니다. 이 휠을 다시 발명하는 것을 피하십시오. 이미 프레임 워크에서 지원됩니다. 항상 수십만 명의 프로그래머들에 의해 훼손되어 매일 수백만 번 테스트되는 코드를 선호합니다. https://stackoverflow.com/a/29260770/17034 –

+0

제 의견으로는이 코드는 예상대로 작동해야합니다 ... – Legends

답변