Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Запуск одной копии приложения


Автор: vfedorov 25.6.2007, 12:19
Как запустить только одну копию приложения?

И если одна уже запущена и пользователь хочет запустить другую - делать активной первую копию и вторую не запускать?

Заранее спасибо

Автор: QryStaL 25.6.2007, 15:08
Класс System.Threading.Mutex содержит все необходимые средства для решения задачи.

Автор: Subl1me 30.6.2007, 16:56
Цитата(QryStaL @  25.6.2007,  15:08 Найти цитируемый пост)
Класс System.Threading.Mutex содержит все необходимые средства для решения задачи. 


Либо класс System.Diagnostics.Process.  smile 

Вот пример на VB.NET

Код

Public Module OneInstanceApplication
          Public Sub Main()
                Dim Proc() as Process
                Dim ModuleName, ProcName As String
                ModuleName = Process.GetCurrentProcess.MainModule.ModuleName
                ProcName = System.IO.Path.GetFileNameWithoutExtension(ModuleName)
                Proc = Process.GetProcessesByName(ProcName)
                If Proc.Length > 1 Then
                      Console.WriteLine("Запущено более одного экземпляра приложения.")
                       Application.Exit()
                End If
          End Sub
End Module


З.Ы. Пример взят из книги Мэтью Макдональда "Рецепты программирования на Visual Basic.NET"

Автор: Naum 31.7.2007, 10:24
Subl1me, Mutex'ами, ИМХО, все-таки лучше.
Цитата(Subl1me @  30.6.2007,  17:56 Найти цитируемый пост)
Visual Basic.NET

В VB вообще в свойствах проекта можно поставить галочку - че-то типа "Запускать не больше одного экземпляра".

Автор: nettitan 21.11.2007, 19:49
Вижуал Бейсик это хорошо но желательно на Шарпе примерчик  smile 

Автор: 1stain 21.11.2007, 20:19
Код

        if (System.Diagnostics.Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName).Length > 1)
            System.Diagnostics.Process.GetCurrentProcess().Kill();

Автор: nettitan 22.11.2007, 20:05
а где это нада втавить?

Автор: D_F_V 23.11.2007, 08:44
Цитата(nettitan @ 22.11.2007,  20:05)
а где это нада втавить?

Класс называется Program, в файле Program.cs
Функция static void Main() - это точка входа в программу..

Код


        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            if (System.Diagnostics.Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName).Length > 1)
            {
                System.Diagnostics.Process.GetCurrentProcess().Kill();
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new logo(5000, false));
            Application.Run(new MDIMain());
        }


Автор: nettitan 13.3.2008, 00:18
Ну а если я открываю вторую копию с параметрами командной строки (например передаю ссылку на некую страницу в интернете), как мне эту сслыку передать первоначальной запущеной программе. Ведь когда мы убиваем копию приложения, ссылка уходит в небытие вместе с убитой копией. Так как же быть??? smile 

Автор: nettitan 15.3.2008, 11:51
ТАФАРИЩИ как же быть?

Автор: _hunter 17.3.2008, 12:04
а в этом случае ищем в гугле что-нить типа "csharp interprocess communications" и находим, например, это:
http://www.codeguru.com/csharp/csharp/cs_network/remoting/article.php/c7259/
можно по тому же remoting'у что-нить поискать... но для текущей задачи труб вполне хватит...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)