У меня есть старое 32-битное приложение delphi (без исходного кода), которое используется как служба Windows. Он отлично работает на Windows 2003 32bit.
Я не знаю, был ли он изначально создан как сервис или преобразован в него позже. Предполагается, что он будет установлен на сервер с помощью /install
флаг в командной строке.
При попытке установить его на виртуальной машине Windows 2008 R2 я получаю событие APPCRASH в журнале событий.
Предполагается, что служба читает большой двоичный объект из удаленного экземпляра SQL Server и записывает его на локальный жесткий диск. Он также считывает некоторые данные инициализации из реестра.
Есть ли способ установить это приложение в качестве службы на Windows 2008 R2 64bit?
Если нет, могу ли я попробовать обходные пути?
Ваши предложения?
У меня была та же проблема, но подсказка Рикардо Пардини с Process Monitor была решением, я обнаружил, что служба (даже во время ее установки) искала dbExpress DLL, которой не было ни в каталоге приложения, ни в поиске дорожка. Копирование библиотек DLL в ту же папку решило проблему.
Мы сами написали довольно много из этих 32-битных сервисов Delphi, и единственное, что действительно помогает нам «отлаживать» сервисы, работающие на серверах (включая 64-битные) без исходного кода, - это Монитор процессов Sysinternal (теперь Microsoft Technet).
В вашем конкретном случае я бы загрузил Process Monitor (это простой исполняемый файл) и запустил его, а затем настроил для фильтрации только приложения вашей службы .exe. Поищите там документы, но на самом деле это очень простой фильтр.
Оставьте Process Monitor запущенным (отфильтрованным) на обеих машинах при запуске службы. Сравните результаты из Process Monitor. Бьюсь об заклад, у вас есть что-то вроде отсутствующего ключа реестра, отсутствующего каталога или разрешения, из-за чего приложение Delphi вызывает исключение. Это должно быть легко обнаружить в Process Monitor. Даже больше, если у вас есть рабочая машина для сравнения.
также у ms есть несколько обновлений совместимости приложений для r2, поэтому, если вы еще не нажали обновление Windows и загрузите.
также можно ли запустить приложение напрямую без параметра / install?
Без доступа к приложению или без какой-либо информации о причинах его сбоя, я могу предложить лишь некоторые общие идеи о том, что может помочь.
Если это просто POS (Plain Old Service;)), вы можете следовать инструкциям здесь http://support.microsoft.com/kb/251192 чтобы вручную установить его как службу. Таким образом вы избежите неудачной процедуры установки, если само приложение работает.
Также можно попробовать запустить его в режиме совместимости. Старые приложения Delphi могут извлечь из этого большую пользу.
Вероятно, он пытается прочитать что-то из 64-битной версии Windows, а не из 32-битной версии Windows. Убедитесь, что у вас установлен и работает правильно 32-разрядный клиент sql server. Помимо этого, опубликуйте appcrash, который должен сообщить вам, какую DLL поместить в wow32.
А пока мы решили продолжить работу на 32-битной ОС и переписать это приложение на .NET ...
Вы ничего не упомянули о UAC. Полностью отключите UAC и попробуйте снова.