Как запретить запуск нескольких копий программы?
От: zaabda  
Дата: 12.01.10 10:03
Оценка:
Здравствуйте! Подскажите, как в с# запретить запуск нескольких копий программы? Ну что-бы программа запустилась, а если второй раз по экзешнику ткнуть, то чтоб ничего бы не происходило. Кажется в давних студиях я находил данную опцию, а в 2008 не найду..
Спасибо!
Re: Как запретить запуск нескольких копий программы?
От: Codechanger Россия  
Дата: 12.01.10 10:19
Оценка: +1
Здравствуйте, zaabda, Вы писали:

Z>Здравствуйте! Подскажите, как в с# запретить запуск нескольких копий программы? Ну что-бы программа запустилась, а если второй раз по экзешнику ткнуть, то чтоб ничего бы не происходило. Кажется в давних студиях я находил данную опцию, а в 2008 не найду..

Z>Спасибо!

Мьютекс?
Re: Как запретить запуск нескольких копий программы?
От: Аноним  
Дата: 12.01.10 10:36
Оценка:
Здравствуйте, zaabda, Вы писали:

Z>Здравствуйте! Подскажите, как в с# запретить запуск нескольких копий программы? Ну что-бы программа запустилась, а если второй раз по экзешнику ткнуть, то чтоб ничего бы не происходило. Кажется в давних студиях я находил данную опцию, а в 2008 не найду..

Z>Спасибо!

class SingleInstanceApplication : WindowsFormsApplicationBase
{
    private App app;
    public SingleInstanceApplication()
    {
        IsSingleInstance = true;
    }

    protected override bool OnStartup(StartupEventArgs eventArgs)
    {
        return  base.OnStartup(eventArgs);
    }
    protected override void OnCreateMainForm() 
    {
         MainForm = new MainForm();
    }

 }


Правда для этого надо сборку Microsoft.visualBasic подключить
Re[2]: Как запретить запуск нескольких копий программы?
От: zaabda  
Дата: 12.01.10 10:40
Оценка:
Здравствуйте, Codechanger, Вы писали:

C>Здравствуйте, zaabda, Вы писали:


Z>>Здравствуйте! Подскажите, как в с# запретить запуск нескольких копий программы? Ну что-бы программа запустилась, а если второй раз по экзешнику ткнуть, то чтоб ничего бы не происходило. Кажется в давних студиях я находил данную опцию, а в 2008 не найду..

Z>>Спасибо!

C>Мьютекс?


Дада.. спасибо, уже нашел!
Re: Как запретить запуск нескольких копий программы?
От: 4374862  
Дата: 12.01.10 11:11
Оценка: -1
Здравствуйте, zaabda, Вы писали:

Z>Здравствуйте! Подскажите, как в с# запретить запуск нескольких копий программы? Ну что-бы программа запустилась, а если второй раз по экзешнику ткнуть, то чтоб ничего бы не происходило. Кажется в давних студиях я находил данную опцию, а в 2008 не найду..

Z>Спасибо!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Diagnostics;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)
            {
                MessageBox.Show("Один экземпляр программы уже запущен", "Программа уже запущена", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
Re[2]: Как запретить запуск нескольких копий программы?
От: Codechanger Россия  
Дата: 12.01.10 13:29
Оценка:
4> if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)
Вы в курсе, что имена процессов могут совпадать для разных приложений?
Re[3]: Как запретить запуск нескольких копий программы?
От: Воронков Василий Россия  
Дата: 12.01.10 14:20
Оценка:
Здравствуйте, zaabda, Вы писали:

C>>Мьютекс?

Z>Дада.. спасибо, уже нашел!

Ну вообще в реальных случаях ведь недостаточно просто отслеживать запущена программа или нет и грубо посылать пользователя. Интереснее, например, делать активным окно уже запущенного приложения. Если при запуске передаются какие-либо аргументы командной строки — то передавать их запущенному инстансу и пр. В общем я бы смотрел не в сторону мьютекса, а скорее в сторону ремотинга или чего-то подобного, чтобы при случае не пришлось ничего переделывать, когда задача усложнится.

У меня есть кое-какой примерчик отслеживания запущенного инстанса и коммуникации с ним:

Клиентский код: http://widestream.svn.sourceforge.net/viewvc/widestream/Source/Murray/Startup/Program.cs?revision=372&amp;view=markup
Небольшая надстройка над ремотинг:
http://widestream.svn.sourceforge.net/viewvc/widestream/Source/Murray/Startup/Activation/
Re[3]: Как запретить запуск нескольких копий программы?
От: Аноним  
Дата: 12.01.10 14:20
Оценка:
Здравствуйте, Codechanger, Вы писали:

4>> if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)

C>Вы в курсе, что имена процессов могут совпадать для разных приложений?

Я просто привел самый простой способ
=
Re[4]: Как запретить запуск нескольких копий программы?
От: Аноним  
Дата: 12.01.10 14:27
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, zaabda, Вы писали:


C>>>Мьютекс?

Z>>Дада.. спасибо, уже нашел!

ВВ>Ну вообще в реальных случаях ведь недостаточно просто отслеживать запущена программа или нет и грубо посылать пользователя. Интереснее, например, делать активным окно уже запущенного приложения. Если при запуске передаются какие-либо аргументы командной строки — то передавать их запущенному инстансу и пр. В общем я бы смотрел не в сторону мьютекса, а скорее в сторону ремотинга или чего-то подобного, чтобы при случае не пришлось ничего переделывать, когда задача усложнится.


ВВ>У меня есть кое-какой примерчик отслеживания запущенного инстанса и коммуникации с ним:


ВВ>Клиентский код: http://widestream.svn.sourceforge.net/viewvc/widestream/Source/Murray/Startup/Program.cs?revision=372&amp;view=markup

ВВ>Небольшая надстройка над ремотинг:
ВВ>http://widestream.svn.sourceforge.net/viewvc/widestream/Source/Murray/Startup/Activation/

http://vbcity.com/blogs/mike-mcintyre/archive/2009/03/17/loading-double-clicked-documents-into-a-single-instance-vb-net-application.aspx
Re[4]: Как запретить запуск нескольких копий программы?
От: 4374862  
Дата: 12.01.10 14:27
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, zaabda, Вы писали:


C>>>Мьютекс?

Z>>Дада.. спасибо, уже нашел!

ВВ>Ну вообще в реальных случаях ведь недостаточно просто отслеживать запущена программа или нет и грубо посылать пользователя. Интереснее, например, делать активным окно уже запущенного приложения. Если при запуске передаются какие-либо аргументы командной строки — то передавать их запущенному инстансу и пр. В общем я бы смотрел не в сторону мьютекса, а скорее в сторону ремотинга или чего-то подобного, чтобы при случае не пришлось ничего переделывать, когда задача усложнится.


ВВ>У меня есть кое-какой примерчик отслеживания запущенного инстанса и коммуникации с ним:


ВВ>Клиентский код: http://widestream.svn.sourceforge.net/viewvc/widestream/Source/Murray/Startup/Program.cs?revision=372&amp;view=markup

ВВ>Небольшая надстройка над ремотинг:
ВВ>http://widestream.svn.sourceforge.net/viewvc/widestream/Source/Murray/Startup/Activation/

http://vbcity.com/blogs/mike-mcintyre/archive/2009/03/17/loading-double-clicked-documents-into-a-single-instance-vb-net-application.aspx
Re: Как запретить запуск нескольких копий программы?
От: 4374862  
Дата: 12.01.10 14:33
Оценка:
Здравствуйте, zaabda, Вы писали:

Z>Здравствуйте! Подскажите, как в с# запретить запуск нескольких копий программы? Ну что-бы программа запустилась, а если второй раз по экзешнику ткнуть, то чтоб ничего бы не происходило. Кажется в давних студиях я находил данную опцию, а в 2008 не найду..

Z>Спасибо!

Кстати, в VB 2008 галочка Make Single Instance Application есть
Re[5]: Как запретить запуск нескольких копий программы?
От: Воронков Василий Россия  
Дата: 12.01.10 14:49
Оценка:
Здравствуйте, 4374862, Вы писали:

4>http://vbcity.com/blogs/mike-mcintyre/archive/2009/03/17/loading-double-clicked-documents-into-a-single-instance-vb-net-application.aspx


Причем тут VB?
Re[6]: Как запретить запуск нескольких копий программы?
От: 4374862  
Дата: 12.01.10 14:57
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, 4374862, Вы писали:


4>>http://vbcity.com/blogs/mike-mcintyre/archive/2009/03/17/loading-double-clicked-documents-into-a-single-instance-vb-net-application.aspx


ВВ>Причем тут VB?


То же самое можно реализовать на C#.. Только надо подключить модуль Microsoft.VisualBasic
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.