Почему мое приложение не запускается с использованием 64-разрядной версии Windows Server 2008?

У меня есть приложение Win32 C ++, использующее несколько сторонних DLL, которое установлено на нескольких сотнях клиентских компьютеров. Недавно я успешно протестировал версию установки x86 в Windows XP, Windows Vista x64, Windows 7 x86, а также Windows Server 2008 x86. Нет проблем. Программа установки (nullsoft) устанавливает распространяемые файлы для VC 2005 и VC 2008, поскольку оба они требуются для различных используемых нами библиотек DLL.

Но с Windows Server 2008 x64 версии x86 и x64 отказываются запускаться. Когда я запускаю версию программы x86, появляется диалоговое окно:

<myApp> has stopped Working.

Журнал событий содержит сообщение:

Faulting application myapp.exe, version 1.0.0.0, time stamp 0x4bcb37ca, 
faulting module MSVCR80.dll, version 8.0.50727.4053, time stamp 0x4a594c79, 
exception code 0xc000000d, fault offset 0x0001ce0b, process id 0x29c, 
application start time 0x01cb0329976cfc68.

\ Windows \ winsxs содержит каталог

x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_none_d08d7da0442a985d

С помощью sxstrace (сначала трассировка, затем синтаксический анализ) создается файл журнала длиной 3 байта, содержащий нечитаемые символы. Поведение версии x64 аналогично. Также все демонстрационные программы из сторонних DLL работают правильно. Намек?


person RED SOFT ADAIR    schedule 03.06.2010    source источник


Ответы (1)


Это не похоже на параллельную ошибку. Код исключения: STATUS_INVALID_PARAMETER, «Службе или функции был передан недопустимый параметр». Это не помогает. Вам понадобится отладчик, возможно, с отладочными символами Windows. Остановите его при первой же возможности.

person Hans Passant    schedule 03.06.2010
comment
Вы были правы: я скопировал WinDbg.exe на машину вместе с исходниками и файлом pdb. Затем я смог увидеть, что переменная среды NUMBER_OF_PROCESSORS не определена на этом компьютере. Мое приложение не проверяло возвращаемое значение getenv () и отказало при разыменовании этого NULL-указателя. Все это происходило во время инициализации глобальных объектов и, следовательно, до ввода WinMain и до создания файла журнала. Спасибо за подсказку, используя отладчик! В данном случае я бы не стал этого делать. - person RED SOFT ADAIR; 04.06.2010