приложение при запуске системы

0

У меня есть приложение, встроенное в Delphi и оно обращается к MySQL данных MySQL используя MyDAC components и Windows XP.

Я хочу, чтобы это приложение запускалось в System Startup, поэтому я добавил Application shortcut в папку Startup также добавил Registry key.

Но когда я запускаю свою систему, сначала появляется сообщение об ошибке Microsoft

 Myapplication.exe has encountered a problem and needs to close.

и запрашивает отчет об ошибках. После этого появляется другая ошибка приложения

 Exception EMyError in module MyApplication.exe
 Can't connect to MySQL server on 'localhost'(10061)
 Socket error on connect.

как я могу это преодолеть?

любая помощь

  • 1
    Приложение будет запускаться при входе пользователя в систему, а не при запуске системы. Если вы действительно хотите запустить систему, вам нужен сервис.
  • 0
    @david это однопользовательская система
Показать ещё 2 комментария
Теги:
startup
windows-xp

2 ответа

5
Лучший ответ

Некоторые подсказки:

  • Вам лучше использовать службу Windows, чтобы приложение запустилось еще до первого входа пользователя в систему;
  • Службы могут быть запущены до того, как сеть или БД готовы, поэтому вы получите это исключение EMyError - в этом случае используйте Sleep(5000) чтобы подождать 5 секунд, а затем повторите попытку до тех пор, пока соединение не произойдет.

Типичным кодом, использующим службу, может быть:

procedure TMyService.Execute;
var retry: boolean;
begin
  retry := true;
  repeat
    try
      ConnectToDatabase;
      retry := false; // connection success
    except
      on E: EMyError do 
        sleep(5000); // wait 5 seconds and retry
    end;
    if Terminated then
      exit; // avoid endless loop
  until not retry;
  // ... now you are connected and you can continue
  • 0
    Если его приложение имеет пользовательский интерфейс, сервис может быть неправильным выбором. Также нет необходимости ждать запуска другой службы. Сервисы имеют зависимости, вы можете установить, что ваш сервис зависит от другого (т.е. MySQL), и Windows обеспечит запуск сервисов, от которых зависит ваш сервис, до того, как ваш. Конечно, это хорошо работает, если другая служба ожидает полной инициализации, прежде чем вернуть управление менеджеру службы. Также ваш код повесит приложение, если оно не может подключиться. Я бы добавил способ прекратить его в любом случае.
  • 0
    Есть ли способ запустить службу MySQL прежде чем моя заявка начинается
Показать ещё 4 комментария
4

Вам нужно реализовать попытку. Кроме цикла для вашего подключения. Если он терпит неудачу, он должен подождать некоторое время и повторить попытку. Скорее всего, ваше приложение запускается раньше и/или быстрее, чем ваш экземпляр mysql.

  • 0
    Как долго ждать, разные системы будут иметь разное время запуска и будет зависеть от доступных ресурсов.
  • 0
    Возможно, вы можете получить информацию о процессе mysql, чтобы определить, запущен ли он. В противном случае начните с 10-секундного ожидания и посмотрите, будет ли оно слишком длинным / коротким, и измените его.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню