2009-06-17 2 views
2

Конфигурация: Сервер Windows 2008 x64.XXX.exe не является действительным приложением Win32

Программное обеспечение - это кроссплатформенная платформа C++ 64bit.

Предыдущий инсталлятор по умолчанию для запроса пользователю установить в

C: \ Program Files (x86) \ Компания \ версия

Для последней версии я изменил установки, используя путь переопределение для установки на

C: \ Program Files \ компания \ версия

ребята, кто делает тестирование для нас говорит, что с новой установки в C: \ Program Files \ суб-процессы не запускается. Переопределить установку в c: \ Program Files (x86) \ xxx все нормально. Переход к cmd.exe и запуск из C: \ Program Files \ xxx приводит к ошибке «yyy.exe не является допустимым приложением Win32». Опять же, это не проблема с c: \ Program Files (x86).

Клиент также установил по умолчанию местоположение и получает те же ошибки.

В моей машине/dev нет таких ошибок. Он запускает демонстрационную версию сервера 2008 (и visual studio express), которая никогда не обновляется и никогда не перезагружается.

Есть ли что-то особенное в отношении «x86», прикрепленного к файлам программы?

Примечание:

Это не проблема на моей машине Dev, которая также сервер 2008 x86_64.

Dumbin/headers ясно указывает, что эти программы 64 бит.

На данный момент ответа нет. Обходным путем является просто установить на Program Files (x86) или в другом месте и сделать с ним. Поставит FAQ, который пользователи НЕ должны устанавливать в Program Files (они будут смотреть на faq, если материал станет ядерным).

Это может быть проблема с установщиком, это может быть классический случай «quack.exe», но применяется к «Program Files». Есть веская причина, почему я вообще ненавижу окна.

+0

xxx.exe - hmm - какой исполняемый файл вы делаете? gahooa

+0

Попробуйте проверить exe в плохом месте с помощью просмотра зависимостей. Должен сказать вам, какие DLL недоступны. Кроме того, попробуйте контролировать процесс во время его запуска с помощью procmon или так, и посмотрите, что не удается во время выполнения. Это должно дать вам лучшее представление о том, чего не хватает. – eran

+0

Пользователь запускает программу из cmd.exe. Ошибка - это диалог, показывающий выше. Что меня бесит, я абсолютно не могу воссоздать эту ошибку самостоятельно. Я просто обновился до sp2 и позже. – Brian

ответ

0

Я думаю, что это связано с манифестом приложения. Вы каким-то образом изменили это? У меня такая же ошибка, когда я переключался между компиляторами. vc9 (vs2008) создал манифест, который мы обычно никогда не используем при компиляции на .net 2003.

+0

В этом приложении нет манифеста. Я использую msvc9 (с выражением 2008), библиотеки cygwin, jam, fltk, pcre, gdal и jpeg, которые все статически связаны друг с другом. – Brian

+0

Я не знаю о экспресс, но с VS2008 Pro вы получаете автоматически сгенерированный манифест по умолчанию. –

+0

И, если быть точным, этот манифест встроен в исполняемый файл. – MSalters

4

В каталоге Program Files (x86) установлены 32-разрядные программы. Когда 32-разрядное приложение запущено, переменная среды% ProgramFiles% равна set в C: \ Program Files (x86) \ (по умолчанию это может быть фактически расположено на другом диске).

Вы уверены, что программа скомпилирована как 64-бит?

+0

Абсолютно 64 бит. Это высокопроизводительный процессор продуктов для массового объема данных, и я могу четко наблюдать за каждым процессом, который исчерпывает все RAM и виртуальную память. – Brian

+0

Также мне нужно поддерживать две отдельные среды сборки. Несколько приложений утилиты компилируются и передаются партнерам как 32 бит. Серьезно больно переключать среду сборки на 32-битную с 64-битной. 32bit aps всегда помечены как * .x86_32.exe. – Brian

+1

Хм ... судя по установочному пути по умолчанию, установщик 32-разрядный. Возможно, это вызывает некоторые проблемы? Есть некоторые другие перенаправления файловой системы (такие как system32, которые перенаправляются на system64 для 32-разрядных приложений) и перенаправления реестра (HKEY_LOCAL_MACHINE \ SOFTWARE \). – Powerlord

1

Возможно, exe находит dll в 32-битной форме как-то в этой конкретной конфигурации? Например. когда sb удалось испортить свой 64-битный каталог с 32-разрядными dll.

Помните, что загрузочные DLL-файлы также загружаются при запуске.

Смежные вопросы