Ахтунг: Глюк в SETUPе для FB 2.0.3

Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать

Модераторы: kdv, dimitr

Ответить
Vit
Сообщения: 19
Зарегистрирован: 05 ноя 2005, 03:22

Ахтунг: Глюк в SETUPе для FB 2.0.3

Сообщение Vit » 03 апр 2008, 02:03

Писал тут setup для своей программы, использующей FB.
Требование FB не ниже 2.0. Само собой дистрибутив FB 2.0 планируется поставлять на CD, но в setup программе желательно проверить чего там на компьютере пользователя установлено. Разные там IB6.0, 6.5, 7.0 и.т.д.
Для этого скачал себе оригинальную программу для установки FB2.0 и начал разбираться как он сам определяет установленные версии. В конце концов ему нужнее. Скопировал все как у FB, а у меня не работает. Не засекает, что работает сервер и все тут. Проверил оригинальный setup и убедился, что тот тоже не засекает.
Любой может в этом убедиться если запустить setup от Firebird 2.0.3.12982 с работающим сервером Firebird 2.0. (прим. Сервер должен быть установлен с выключенным гвардейцем).

Пришлось разбираться как FB Setup определяет установленные и запущенные версии.

1. Сначала сканируется ключи реестра от всех возможных версий FB и IB. Тут все чисто.
2. Затем сканируются версии файлов от найденных установок в реестре. OK.
3. Так как сервер может быть установлен, но не запущен, пытается определить запущенные сервера. И тут самое интересное.
!!!!Setup не находит работающий сервер, который сам же и установил!!!
Не, ну я бы понял, если бы он не находил какой-нибудь IB 4.5 Beta или еще какую экзотику, но не находить то что сам поставил это уже оригинально.

Далее он, не найдя, считает что ничего нету, и пытается при работающем сервере перезаписать файл FBServer.exe и еще все DLL. Естественно он на этом успешно обсерается и ругается пользователю соответсвующими сообщениями. Представляете себе реакцию какого-нибудь бухгалтера на такое. А кто будет виноват? понятное дело автор программы, то есть я.

Пришлось разбираться.

Вот что показало вскрытие:

Определяется запущенный сервер так (Код Innosetup):

Код: Выделить всё

function FirebirdDefaultServerRunning: boolean;
var
  Handle: Integer;
  mutex_found: boolean;
begin
  result := False;

  //Look for a running version of Firebird 1.5 or later
  Handle := FindWindowByClassName('FB_Disabled');
  if ( Handle = 0 ) then
    Handle := FindWindowByClassName('FB_Server');
  if ( Handle = 0 ) then
    Handle := FindWindowByClassName('FB_Guard');

  if (Handle > 0) then
     result := True
  else begin
    mutex_found := CheckForMutexes('FirebirdGuardianMutex,FirebirdServerMutex');
    if mutex_found then
      result := true;
  end;
end;
Исследование запущенного сервера при помощи программы Handle.exe показало следующее:
окна с классом FB_Disabled FB2.0 не имеет
окна с классом FB_Server FB2.0 не имеет
окна с классом FB_Guard FB2.0 не имеет
Чего их анализируют не понятно.

Мьютекса FirebirdGuardianMutex, и FirebirdServerMutex не имеет. То есть правильно Setup не находит запущенный сервер.

Также было установлено, что если сервер установлен с гвардейцем, то mutex FirebirdGuardianMutex таки создается и все работает хорошо, а вот если установить FB c выключенным гвардейцем, то такой мьютекс не создается.
При помощи Handle.exe обнаружил что сервер создает 2 других поименованных мьютекса FIREBIRD_CONNECT_MUTEX и firebird_trace_mutex.

Обнаружить работающий FB2.0 можно по любому из этих мьютексов. Я так и сделал и всем рекомендую.

З/Ы
Передайте этот месседж аффтарам FB, если знаете куда. Может исправят приведенную процедуру из setupa, или в сервере таки создадут Mutex FirebirdServerMutex.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Ахтунг: Глюк в SETUPе для FB 2.0.3

Сообщение hvlad » 03 апр 2008, 14:37

Vit писал(а):Передайте этот месседж аффтарам FB, если знаете куда. Может исправят приведенную процедуру из setupa, или в сервере таки создадут Mutex FirebirdServerMutex.
Сюда можешь внести ?

Vit
Сообщения: 19
Зарегистрирован: 05 ноя 2005, 03:22

Re: Ахтунг: Глюк в SETUPе для FB 2.0.3

Сообщение Vit » 03 апр 2008, 15:49

[quote="hvladurl=http://tracker.firebirdsql.org/]Сюда[/url] можешь внести ?[/quote]

Внес.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 03 апр 2008, 16:58

Спасибо

Ответить