none
Как запустить только один процесс программы? RRS feed

  • Вопрос

  • Я хочу сделать так, чтобы запускалась только одна копия программы. То есть, если программа запускается, и оказывается, что эта программы уже была запущена, то она должна запускать какой-то метод первой запущенной копии программы (передавая туда аргументы командной строки). Например, как при открытии веб-страниц (не из интернета, а с файловой системы компьютера) во многих браузерах не открывается новое окно, а открывается новая вкладка.

    Основная проблема передать первой копии программы аргументы командной строки. Можно ли это сделать с помощью C#, если можно (вызыванием метода, как описано выше, или ещё как-нибудь), подскажите, пожалуйста, как? И как отследить, что уже запущена другая копия программы, при запуске?

    • Перемещено Tagore Bandlamudi 1 октября 2010 г. 21:56 MSDN Forums consolidation (От:Visual C#)

Ответы

  • Что-то вроде

    using System;
    using System.Linq;
    using System.Windows.Forms;
    using Microsoft.VisualBasic.ApplicationServices;
    
    namespace SingleInstanceAppOnCSharp
    {
      class MyApplication : WindowsFormsApplicationBase
      {
        public MyApplication()
        {
          this.IsSingleInstance = true;
          this.EnableVisualStyles = true;
          this.SaveMySettingsOnExit = true;
          this.ShutdownStyle = ShutdownMode.AfterMainFormCloses;
        }
    
        static MyApplication()
        {
          MyApplication.Instance = new MyApplication();
        }
    
        public static MyApplication Instance { get; private set; }
    
        protected override void OnCreateMainForm()
        {
          this.MainForm = new Form1();
        }
      }
    
      static class Program
      {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
          MyApplication.Instance.StartupNextInstance += new StartupNextInstanceEventHandler(Instance_StartupNextInstance);
          MyApplication.Instance.Run(args);
        }
    
        static void Instance_StartupNextInstance(object sender, StartupNextInstanceEventArgs e)
        {
          MessageBox.Show(String.Join(" ", e.CommandLine.ToArray()));
        }
      }
    }
    

Все ответы