Приветствую всех.Вот хотел спросить какие еще есть способы исключения повторного запуска программы,кроме как юзать мьютекс?Ибо запустил прогу и за ней вторую, у них исключения прорабатываются одним и тем же кодом через мьютекс в следствие чего одна из прог не запускается так как считает что уже запущена.Жду предложений.
Поиск процесса с именем файла (если он неизменен) Создание временного флага в реестре, файловой системе . . . . Создание пайпа(pipe) Открытие порта (socket) Сканирование адресного пространства всех запущенных процессов, парсинг их секции кода/даных/ресурсов и поиск уникальной сигнатуры. Смена обоев рабочего стола на свой уникальный BMP файл c последующим сканированием картинки рабочего стола на предмет установки этого самого файла путем битового анализа файла... Установкой перехвата некой ядерной функции при первичном запуске программы с последующей проверкой установки этого хука... Постановка вопроса пользователю о том, что он согласен с возможным сбоем програмым сли он соврет о том, что уже запускал копию программы Все зависти от извращенности фантазии человека..
можно создавать именованный объект. то есть: 1. создаешь именованный объект. 2. вызываешь GetLastError() и сравниваешь возвращаемое значение с ERROR_ALREDY_EXISTS. 3. если совпадает - значит экземпляр приложения уже запущен.
Драйвер-фильтр файловой системы, который будет скрывать исполняемый файл после запуска вроде еще никто не предлагал. ЗЫ: использование в исполняемом файле оверлея, сам понимаешь, недопустимо.
Если после запуска ты не будешь иметь возможности вообще видеть исполняемый файл, то ты его и не запустишь, в чем собственно и заключалось ТЗ, понел, дурашка?
я думал о более простом решении: Находить по активации формы окно с нужным заголовком и закрываться если найдено.Способ хоть и прост, но по идее должен работать.Спасибо всем отписавшим,рассмотрю и Ваши варианты.
На Delphi это делается как два пальца об асфальт PHP: program Project1; uses Forms, Windows, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin Application.Initialize; if findwindow('TForm1','Form1')<>0 then Application.Terminate; Application.CreateForm(TForm1, Form1); Application.Run; end. соответственно меняешь своего окна класс и имя как тебе надо.
DYUMON, что за ересь? Code: SetLastError(0); CreateMutex(nil,true,'OLOLO'); if GetLastError=ERROR_ALREADY_EXISTS then halt;
Да хз я таким никогда не пользовался. там по идее если программа упала с ошибкой и не убрала после себя обьект то потом хрен запустишь прогу повторно(проверил обьект убирается).