32-разрядная служба Windows не запускается в 64-разрядной версии Windows 7

#windows #64-bit

#Windows #64-разрядная

Вопрос:

У меня 32-разрядный windows .exe. Которая будет запускаться как служба Windows. Этот EXE-файл отлично работает как сервис для 32-разрядной версии Windows 2000 / xp.

Однако при попытке запуска на 64-разрядном сервере Windows 2008 происходит сбой. Я наблюдаю два случая.

1) Если я создам приложение на VC 6. Из записи журнала событий, похоже, Kernel.dll происходит сбой.

Ошибка Имя приложения: , версия: , отметка времени: 0x4e6461c0
Имя модуля сбоя: KERNELBASE.dll , версия: photoshop, отметка времени: 0x4a5bdbdf
Код исключения: 0xe06d7363
Смещение ошибки: 0x0000b727
Идентификатор процесса сбоя: 0xe2c
Время запуска приложения с ошибкой: 0x01cc83cb1052e4b3
Ошибка пути к приложению: C:Program Файлы (x86)\Admin.exe
Путь к неисправному модулю: C:Windowssyswow64KERNELBASE.dll
Идентификатор отчета: 4e0693b4-efbe-11e0-a07f-001143e8bb9d

2) Если я создаю приложение с 32-разрядной версией VS2005, отображается ошибка времени выполнения и в журнале событий указано msvscrt.dll разбился.

Ошибка Имя приложения : , версия: ,
Ошибка имя модуля: MSVCR80.dll , версия: 8.0.50727.4927, отметка времени: 0x4a2752ff
Код исключения: 0x40000015
Смещение ошибки: 0x000046b4
Идентификатор процесса сбоя: 0x34c
Время запуска приложения с ошибкой: 0x01cc8c4f2a223426
Ошибка пути к приложению: C:Program Файлы (x86)\Admin.exe
Путь к неисправному модулю: C:WindowsWinSxSx86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5MSVCR80.dll
Идентификатор отчета: 69554d57-f842-11e0-a07f-001143e8bb9d

Пожалуйста, помогите мне решить эту проблему.

Комментарии:

1. Вы пробовали отлаживать приложение? Веб-поиск по 0xe06d7363 показывает, что это неперехваченное исключение C , поэтому трассировка стека должна быстро показать, что пошло не так. Веб-поиск по 0x40000015 показывает, что это фатальный выход из среды выполнения C, поэтому трассировка стека также должна быстро определить причину.

2. Вероятно, это та же причина сбоя, версия VS2005 правильно вызывает terminate() при необработанном исключении C . Выяснить, почему возникает исключение, никогда не сложно с помощью отладчика, практически невозможно без него.

Ответ №1:

Вам необходимо лучше диагностировать проблему, прежде чем вы сможете ее решить, что, вероятно, означает поиск способа воспроизвести ее во время выполнения программы в отладчике. Некоторые предложения:

Поскольку ваша служба является EXE (а не DLL, которая запускается под svchost.exe , которое является общим именем хост-процесса для служб, запускаемых из библиотек DLL), вы должны иметь возможность использовать опцию «Присоединить к процессу» в Visual Studio, чтобы присоединить к нему отладчик. Для этого может потребоваться запустить Visual Studio от имени администратора и / или изменить пользователя, под которым выполняется служба.

Кроме того, если служба выходит из строя вскоре после запуска, вам может потребоваться вызвать MessageBox with MB_SERVICE_NOTIFICATION , чтобы приостановить выполнение на достаточно долгое время, чтобы вы могли подключить отладчик.

Однако, если служба выходит из строя во время запуска еще до того, как она достигнет MessageBox , вам необходимо создать ее как консольное приложение. Теперь вы можете запустить ее в отладчике и посмотреть, что происходит.

Ответ №2:

Не могли бы вы попробовать установить распространяемый пакет на клиентском компьютере для запуска вашего приложения.