Как мы запускаем 32-разрядное приложение .NET на 64-разрядном сервере Windows? - PullRequest
2 голосов
/ 19 февраля 2009

Мы устанавливаем стороннее приложение на один из наших 64-битных серверов Windows. Это приложение, очевидно, было построено с опцией компилятора для выбора платформы во время выполнения. Когда мы запускаем приложение, оно выдает нам ошибку:

System.BadImageFormatException: is not a valid Win32 application.

Я видел на форумах MSDN, что для исправления этой ошибки мне нужно создать приложение, настроенное на 32-разрядное, и таким образом оно будет нормально работать на 64-разрядном сервере. Я проверяю другие ссылки StackOverflow Другие сообщения .

Как обойти эту ситуацию? Для всех, кто хочет знать больше информации:

  1. Приложение работает нормально на 32-битном тестовом сервере.
  2. IIS версия 6
  3. с использованием SQL Server Express 2005
  4. В расширении веб-службы есть как Framework64 \ v2.0.50727 \ aspnet_isapi.dll
  5. и Framework \ v2.0.50727 \ aspnet_isapi.dll

Ответы [ 4 ]

4 голосов
/ 19 февраля 2009

Одна из возможностей заключается в том, что приложение зависит от неуправляемой библиотеки DLL, которую необходимо запустить в 32-разрядном режиме. Поскольку стандартная сборка «AnyCPU» .NET проверяет платформу автоматически, часть программы .NET запускается в 64-битном режиме. Это приведет к сбою вызовов 32-разрядной неуправляемой библиотеки DLL.

Чтобы исправить это, вам нужно создать файл манифеста, чтобы приложение работало в 32-битном режиме. Мне никогда не приходилось делать это самостоятельно, поэтому я не могу предоставить инструкции, и быстрый поиск в Google (пока) ничего не дал.

[Update]
Посмотрите, поможет ли эта ссылка:
http://msdn.microsoft.com/en-us/library/aa374191.aspx

3 голосов
/ 19 февраля 2009

Я не уверен, что это поможет, но проверьте это:
http://msdn.microsoft.com/en-us/library/ms164699(VS.80).aspx

0 голосов
/ 19 февраля 2009

Единственное, что может сработать, - убедиться, что приложение .Net помечено как истинное 32-разрядное приложение, изменив сведения о целевом процессоре.

В Visual Studio 2005 вы можете сделать это, перейдя в проект Свойства и в разделе Build установите Цель платформы до x86 , а не Любая ВСУ , которая используется по умолчанию.

0 голосов
/ 19 февраля 2009

Детали вопроса немного сбивают с толку, но я возьму пунт.

Требуется версия aspnet_regiis.exe, находящаяся в папке Framework \ v2.0.50727 \ на веб-сайте, где выполняется этот код

...