Реферат: Предотвращение запуска 2-x копий программы

Реферат: Предотвращение запуска 2-x копий программы




🛑 👉🏻👉🏻👉🏻 ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻




























































Известно, что Windows - многозадачная система. Это конечно хорошо. Но обратной стороной многозадачности является то, что одновременно можно запустить несколько копий одного и того же приложения. Пользователь может это сделать не специально, да и вторая копия приложения может запуститься из-за ошибки в программе или же самой OC. Из-за клона могут возникнуть некоторые проблемы, связанные с файловыми операциями, операциями с реестром и т.п. Поэтому код поиска и закрытия собственной копии в программе совсем не лишний. Есть несколько методов выполнения нахождения копии. В этой статье я их вам продемонстрирую.
Чтобы найти копию главного окна можно воспользоваться функцией WinApi - FindWindow. В качестве параметра этой функции передается имя класса окна, которое использовалось при регистрации типа, определяющиего окно формы или в системе окон (WndClass) и заголовка окна. В Дельфи имя оконного класса WndClass совпадает с именем класса формы в Object Pascal (например TForm1). Функция возвращает 0, в случае если окна не существует, либо дескриптор окна, если окно существует. Основной код вашей программы должен быть написан так, что бы программа смогла запуститься, если результат функции FindWindow равен нулю или завершиться в обратном случае. Следующий пример, если вы собираетесь его использовать, нужно вставить в dpr-файл проекта (меню Project - View Source). Пример:
HWnd := FindWindow ('TForm1', nil);
Application.CreateForm(TForm1, Form1);
//если в программе несколько форм, то создайте их здесь
//вручную, например Application.CreateForm(TForm2, Form2)
Разъясню код по строчкам. В первых двух строках я объявил переменную HWnd типа THandle для хранения результата работы функции. Далее записываю результат выполнения функции FindWindow в переменную HWnd. Затем сравниваю результат: если он не равен нулю (т.е. программа уже запущена и данный экземпляр является копией) активизирую главную форму запущенного приложения. В обратном случае выполняю операции по инициализации, создания форм и запуска программы.
Однако при использовании этого кода могут возникнуть некоторые проблемы. Учтите, что если вы запустите программу в то время, когда работает дельфи с открытым в ней проектом запускаемого приложения, то программа вообще не запустится. Это связано с тем, что в системе уже существует форма с сответствующим классом в конструкторе дельфи. Однако вы сможете запустить программу, если закроете в дельфи файл юнита, связанного с формой, и саму форму (или лучше вообще весь проект). Если же вы просто закроете форму в конструкторе дельфи, то окно не уничтожится, а будет скрыто и так же будет существовать в системе. Поэтому встраивать этот код лучше на этапе завершения работы над программой.
Mutex - это сокращение от mutual exclusion (взаимное исколючение). Это наиболее традиционный подход для среды Win32. Вообще мьютекс обычно используют не для нахождения копии программы, но этот объект можно приспособить и для этой цели. Мьютекс поддерживается на уровне ОС и его специфика такова, что мьютекс с заданным именем может принадлежать только одному приложению, либо никому. После того, как программа создала мьютекс, она может проверить, принадлежит ли этот объект какой либо программе. Для проверки используется функция WinApi - WaitForSingleObject. Если в момент обращения к этой функции мьютекс принадлежит кому либо, то функция ждет определенное количество времени (передается в качестве параметра) до освобождения мьютекса (если мьютекс не будет освобожден то функция возвратит ошибку с кодом wait_TimeOut). А если мьютекса не существует (т.е. основная программа не запущена), то программа становится владельцем мьютекса. Реализация такого подхода показана в следующем примере:
hMutex := CreateMutex(nil, False, 'UniqueProgrammMutex');
if WaitForSingleObject(hMutex, 0) <> wait_TimeOut then
Application.CreateForm(TForm1, Form1);
Этот метод является безусловно надежнее предыдущего. Единственный недостаток этого метода - это то, что при запуске копии программы главное окно запущенного приложения не активируется, хотя это легко можно исправить путем поиска главного окна в списке окон либо с помощью описанной функции FindWindow.

Название: Предотвращение запуска 2-x копий программы
Раздел: Рефераты по информатике, программированию
Тип: реферат
Добавлен 12:00:28 08 декабря 2005 Похожие работы
Просмотров: 38
Комментариев: 16
Оценило: 3 человек
Средний балл: 5
Оценка: неизвестно   Скачать

Срочная помощь учащимся в написании различных работ. Бесплатные корректировки! Круглосуточная поддержка! Узнай стоимость твоей работы на сайте 64362.ru
Если Вам нужна помощь с учебными работами, ну или будет нужна в будущем (курсовая, дипломная, отчет по практике, контрольная, РГР, решение задач, онлайн-помощь на экзамене или "любая другая" учебная работа...) - обращайтесь: https://clck.ru/P8YFs - (просто скопируйте этот адрес и вставьте в браузер) Сделаем все качественно и в самые короткие сроки + бесплатные доработки до самой сдачи/защиты! Предоставим все необходимые гарантии.
Привет студентам) если возникают трудности с любой работой (от реферата и контрольных до диплома), можете обратиться на FAST-REFERAT.RU , я там обычно заказываю, все качественно и в срок) в любом случае попробуйте, за спрос денег не берут)
Да, но только в случае крайней необходимости.

Реферат: Предотвращение запуска 2-x копий программы
Эссе По Английскому Алгоритм
Контрольная Работа По Теме Клетка 10 Класс
Реферат Современная Библиотека
Рефераты: Макроэкономика.
Учет Материалов Курсовая Работа
Реферат Период Беременности
Учреждение Социальная Защита Населения Реферат
Реферат по теме Бхагавадгита, как она есть
Курсовая работа: Аналіз ризику факторингової діяльності банківських структур
Экономика Доходы И Расходы Семьи Реферат
Контрольная Работа На Тему Влияние Рассматривания Художественных Картин О Природе На Обогащение Содержания Изодеятельности Дошкольников
Реферат по теме Документационная грамотность общества, обусловленная прочностью закрепления характерных признаков документов в сознании носителей языка
Реферат по теме Антье и ее окружение
Курсовая работа: Драматургия Шиллера. Скачать бесплатно и без регистрации
Дипломная работа по теме Финансовая политика предприятия и направления её совершенствования в современных условиях (на примере ООО 'Компания Орион')
Реферат: Тоталитаризм и авторитаризм
Контрольная работа: Сравнительная характеристика адвокатуры Украины и Германии
Контрольная работа по теме Порівняння поглядів та концепцій Г. Кана та А. Вінера на теорію зростання добробуту в економіці суспільства майбутнього
Контрольная Работа Начало
Курсовая работа: Постановка процессной системы управления блока производства типового НПЗ крупной нефтяной компании
Доклад: Селезнев Геннадий Николаевич
Реферат: О драме в современном театре: verbatim
Реферат: Охраны труда и организация рабочих мест

Report Page