Назад
Создание прибыльного бизнеспроекта на базе сайта

SEO + ASP.NET 4.0 + БИЗНЕСМОДЕЛЬ = ПРИБЫЛЬНЫЙ САЙТ

Инструмент быстрого построения прибыльного онлайн бизнеса своими силами без капиталовложений за 4 месяца все подробности на SEO + ASP.NET 4.0.

Подписка на рассылку

МАГИЯ C#!

Создание вебсайта с формой автоматического приема онлайн платежей по WebMoney!
Ваше имя
Ваш e-mail
Уроки по ASP.NET c# ADO.NET
     

18 видеоуроков
более 5 часов
по созданию сайта,
выполняющего
продажи ваших продуктов (физических/электронных) на полном автомате с личным оповещением на e-mail, а также ...
DVD-курс по C#, .NET

3 часть. Введение в ASP.NET. WebServices Профессиональная подготовка разработчика по языку C# на платформе .NET

asp.net webservices dvd c# gridview Гудок курс Более 65 подробных видео уроков по теоретическим основам технологии сайтостроения ASP.NET и процессу создания и использованию вебсервисов.

DVD-курс по C#, .NET

2А часть. XML/TXT в аспекте ADO.NET Профессиональная подготовка разработчика по языку C# на платформе .NET

xml txt dvd c# ADO ADO.NET Гудок курс 70 подробных видео уроков по работе с форматами xml, txt, по работе с файлами и директориями. Разработка высокоорганизованных свойств для значительного сокращения объема исходного кода и облегчения дальнейшей модификации и многое-многое другое...

DVD-курс по C#, .NET

1 часть. Windows Forms Профессиональная подготовка разработчика по языку C# на платформе .NET

Профессиональная подготовка на c# А. Гудок

185 подробнейших уроков (70 часов) лекций в формате видеоуроков по теории языка c# и платформы .NET. Практическое закрепление теоретического материала на примере создания Windows Forms - приложения видеоигры "Tanks"

DVD-курс по C#, .NET

2 часть. ADO.NET/SQL Профессиональная подготовка разработчика по языку C# на платформе .NET

Профессиональная подготовка на c# А. Гудок ADO.NET sql

165 подробных видео уроков по созданию приложений распределенных баз данных на примере разработки проектов с использований технологий ADO.NET (Connected model, Disconnected model, Typed DataSet, ...)


Я записываю курсы!
  Курс валют

НБУ курс евро






Запуск одного экземпляра приложения на c#



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

Когда один поток получает мьютекс-объект,все остальные потоки не могут получить доступ к нему до тех пор, пока данный поток не освободит его. Мы помним, что любое приложение запускается в отдельном потоке, а значит, вполне логично воспользоваться возможностями мьютекса для управления копиями приложения.

Как же работает Mutex. При своем запуске приложение пытается создать мьютекс с определенным именем. Если это удалось, то запускаемый экземпляр приложения является первым и пока единственным. В противном случае Mutex не позволит вновь запустить пока еще работающее приложение Поэтому, данный класс мы и используем в нашем случае:

using System;
using System.Windows.Forms;
using System.Threading;

namespace OneCopyOfApp
{
    static class Program
    {
        private static Mutex m_instance;
        private const string m_appName = "NameOfMyApp";
 
        [STAThread]
        static void Main()
        {
            bool tryCreateNewApp;
            m_instance = new Mutex(true, m_appName, 
                    out tryCreateNewApp);
            if (tryCreateNewApp)
            {
                Application.EnableVisualStyles();
                Application.
                  SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
                return;
            }          
        }
    }
}

Ключевым моментом в данном коде является инструкция

m_instance = new Mutex(true, m_appName, out tryCreateNewApp);

В данном конструкторе первый параметр указывает на необходимость для приложения получать создаваемый мьютекс. True указывает на это. Второй параметр задает имя мьютекса. Третий параметр как раз устанавливается в процессе создания мьютекса и указывает был ли получен мьютекс. Соответственно, с одним и тем же именем мьютекса мы не можем захватить его дважды. В итоге, проверив факт захвата мьютекса мы сами определяем запускать ли новую копию приложения.

Создайте новый проект и поместите в него данный код. Проже всего проверить его в работе это открыть еще одно окно VisualStudio с данным проектом и попробовать запустить его из обеих открытых VS. В итоге первый запуск пройдет нормально, второй попытается запуститься и сразу же закроется. Мы успеем лишь заметить некоторое мигание.

Есть второй, более безопасный в отношении атак способ. Основан он на библиотеках VB. Для начала добавьте ссылку на сборку Microsoft.VisualBasic.dll.

Рисунок 1. Добавление сборки VB

Для удобства вынести в начало проекта пространство имен Microsoft.VisualBasic.ApplicationServices. Ну а сам код следующий (обратите внимание каким образом мы вызываем метод Run())

using System;
using System.Windows.Forms;
using System.Threading;
using Microsoft.VisualBasic.ApplicationServices;

namespace OneCopyOfApp
{
    public class OneInstanceApp : 
        WindowsFormsApplicationBase
    {
        private SingleInstanceApplication()
        {
            base.IsSingleInstance = true;
        }

        public static void Run(Form form,
            StartupNextInstanceEventHandler startupHandler)
        {
            OneInstanceApp app = 
                new OneInstanceApp();
            app.MainForm = form;
            app.StartupNextInstance += startupHandler;
            app.Run(Environment.GetCommandLineArgs());
        }
    }

    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            OneInstanceApp.Run(new Form1(),
                StartupNextInstanceHandler);
        }

        static void StartupNextInstanceHandler(
            object sender, StartupNextInstanceEventArgs e)
        {
            MessageBox.Show(e.CommandLine[0]);
        }
    }
}

Вот, таким нехитрым кодом мы запрещаем повторный запуск любого приложения.



Больше информации читайте по теме:



Оценить статью:

Оценивая статью, Вы подсказываете нам насколько данная информация стала полезной именно для Вас. Мы ожидаем, прежде всего, оценку доступности материала для понимания и простоты его изложения. Дополнительные комментари, вопросы, дополнения и замечания Вы можете указать на странице От Вас

Частичное, или полное копирование материала данной статьи возможно лишь при размещении ссылки на данную страницу.


            
        


        Cross    19.08.2011 17:19:48
        

Error 1 Method must have a return type SingleInstanceApplication

95.53.17.66




Имя:  


Текст комментариев (не больше 600 знаков):  
введите не более 600 знаков



Введите символы с картинки:
Капча имеет "срок годности". Поэтому, если необходимо обновите страницу.



Сантехник срочно
c# курс Гудок   курс по ASP.NET Гудок   курс по ADO.NET Гудок   курс по XML txt Гудок   курс по рефлексии и многопоточности Гудок