Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2022, 15:14   #1
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию Запрет повторного запуска приложения

Всем доброго времени суток. Помогите пожалуйста решить вопрос.
Есть программа, запуск которой хочу запретить из одной и то же папки. Из других папок можно.
Пытаюсь запретить так:
Код:
  CreateMutex(nil, false, PChar(ExtractFilePath(ParamStr(0)) + 'MyProg'));
  if GetLastError = ERROR_ALREADY_EXISTS then
    begin
      MessageBox (0, 'Программа уже запущена. Повторный запуск возможен только из другой папки.', 'Информация',
                  MB_OK or MB_ICONINFORMATION);
      exit;
    end;
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
Программа легко запускается откуда только можно, в том числе и из той же папки.
Если делаю через Ansi функцию CreateMutexA, то программа действительно перестаёт запускаться из этой же папки. Т.е. защита от повторного запуска работает как надо.
Но компилятор ругается (W1044 Suspicious typecast of string to PAnsiChar) на вот это:
Код:
  CreateMutexA(nil, false, PAnsiChar(ExtractFilePath(ParamStr(0)) + 'MyProg'));
  if GetLastError = ERROR_ALREADY_EXISTS then
    begin
      MessageBox (0, 'Программа уже запущена. Повторный запуск возможен только из другой папки.', 'Информация',
                  MB_OK or MB_ICONINFORMATION);
      exit;
    end;
Как быть? Забить на варнинг компилятора? И почему не отрабатывает Unicode фукнция как надо?
З.Ы. Версия Delphi 10.4. Весь этот код в файле DPR,а не в юните формы.

UPD
Оказывается не совсем работает ANSI версия корректно. Если в этой же папке создать еще одну папку и скопировать туда ЕХЕшник, то она так же ругается, что уже запущен. Но полный путь то изменился.
Я так понимаю, что то с созданием Мютекса не то. Может ему не нравятся символы из пути типа ":" или ""

Последний раз редактировалось FaTaL; 07.07.2022 в 15:46.
FaTaL вне форума Ответить с цитированием
Старый 07.07.2022, 16:25   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Короче оставил Юникодную функцию, но все символы в строке с путём к папке заменил на = вместо \ и теперь работает нормально.
FaTaL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как заново выполнить отладку после повторного запуска? nikytt Visual C++ 4 30.08.2015 17:29
Сохранение измененных данных в datagridview после повторного запуска mdiChild-окна программы с этим же dgv zzyika Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 27.02.2015 04:49
Запрет запуска приложения повторно grim225 C# (си шарп) 2 02.01.2013 11:52
Защита от повторного запуска Vladya Помощь студентам 8 24.06.2009 09:04