Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Исключение повторного запуска проги 
:(
    Опции темы
EvilsInterrupt
Дата 27.8.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 1
Всего: 9



Сегодня столкнулся с тем, что нужно было не просто исключить повторный запуск, а весьма хитро исключить )

Разрабатываю репликатор, он цепляется к промышленному COM-серверу, и ложит в базу данных. Этот репликатор разрешено для запуска в двух экземплярах, но ! , в разных папках. К примеру один репликатор для турбогенератора, а другой для котлоагрегата ! ;)

Из этой ситуации, мне не подошел варинт с глобальным атомом, уж очень много мороки - вдруг юзер вырубиль репликатор через диспетчер задач, значит глобальный атом при запуске надо искать и спрашивать юзера, а первый ли он раз запускает этот репликатор.

Вобщем выставил требования таковыми:

1. Возможность запуска двух экземпляров репликатора, но с разных папок.
2. Из одной папки репликатор можно запустить только и только в одном экземпляре
3. Репликатор не должен зависеть от последствий аварийного выключения через диспетчер задач.


При данных требованиях, остановился на следующем коде, может кому и поможет:

Код

  function  IsApplicationRun : Boolean;
  var
    hMutex        : THandle;
  begin
    Result  := False;
    hMutex := CreateMutex(nil, True,
              PChar(AnsiReplaceText(Application.ExeName,'\','/')));
    if  GetLastError = ERROR_ALREADY_EXISTS then
        Result := True;
  end;


hMutex - несмотря на то что это локальная переменная и казалось мы же теряем значение хэндла. Ну и что я спрошу ))) В конечном итоге, хоть через диспетчер задач, хоть через Application.Terminate хэндлы то убиваются - значит убивается и мьютекс ;)

Думаю, это решит проблемы новичков
PM MAIL WWW ICQ Jabber   Вверх
07pov23
Дата 20.1.2009, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



Столкнулся с такой проблемой. Вроде бы программа не запускается дважды. Но! В терминальном режиме ни одна фича приведенная здесь не запускается. Подскажите, пожалуйста, как можно запретить запуск нескольких копий программы в терминальном режиме разными пользователе.
ЗЫ. Еще вопрос хоть не совсем в тему, но все же. Как запускать программу в качестве службы или под системой, т.е. еще до аутентификации пользователя
PM MAIL   Вверх
dumb
Дата 20.1.2009, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Цитата(07pov23 @  20.1.2009,  17:01 Найти цитируемый пост)
как можно запретить запуск нескольких копий программы в терминальном режиме разными пользователе.

07pov23, берешь любой код с CreateMutex/Event/FileMapping и в имени объекта делаешь префикс 'Global\', т.е. вместо 'MyOwnMutex'(см. 3ий пост) становится 'Global\MyOwnMutex'. единственное, что надо бы проверку версии винды делать, ибо до w2k(вроде) такой префикс недопустим.

Цитата(07pov23 @  20.1.2009,  17:01 Найти цитируемый пост)
ЗЫ. Еще вопрос хоть не совсем в тему, но все же. Как запускать программу в качестве службы или под системой, т.е. еще до аутентификации пользователя 
правила форума прочти. а так, как вариант - http://support.microsoft.com/kb/137890
PM MAIL   Вверх
07pov23
Дата 21.1.2009, 10:00 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



Вся проблема в том, что как раз win2k и есть.
PM MAIL   Вверх
bems
Дата 22.1.2009, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Цитата(dumb @  20.1.2009,  19:21 Найти цитируемый пост)
что надо бы проверку версии винды делать, ибо до w2k(вроде) такой префикс недопустим.

а в Висте в глобал очень мало кого пускают


--------------------
Обижено школьников: 8
PM MAIL   Вверх
bartram
Дата 24.1.2009, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 3
Всего: 29



Цитата(07pov23 @  20.1.2009,  19:01 Найти цитируемый пост)
ЗЫ. Еще вопрос хоть не совсем в тему, но все же. Как запускать программу в качестве службы или под системой, т.е. еще до аутентификации пользователя 

Модератор: Пожалуйста, один топик - один вопрос.

 Правила форума: http://forum.vingrad.ru/index.php?act=boardrules


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0937 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.