Запуск 32-битного приложения .NET на 64-битной машине

У меня есть приложение с проектами, имеющими платформу как любой процессор. при запуске приложения на 64-битной машине (win7) в VS2008 я вижу в диспетчере задач процесс с * 32, что означает, что он работает в 32-битном режиме. Но я читал, что приложения с платформой как любой процессор работают в зависимости от машины (64-битная в моем случае). Я весь в замешательстве. Пожалуйста, объясни.


person nishantv    schedule 04.07.2012    source источник


Ответы (3)


Вы уверены, что проект, создающий исполняемый файл, имеет значение AnyCPU, а не x86? Этот проект, а также все упомянутые проекты должны быть установлены на AnyCPU. Если вы сделаете это, процесс будет работать как 64-битный процесс в 64-битной Windows (и как 32-битный процесс в 32-битной Windows).

Именно целевая платформа для проекта .EXE определяет «разрядность» приложения. Если какой-либо упомянутый проект .DLL имеет «разрядность», несовместимую с «разрядностью» работающего приложения, вы получите ошибку времени выполнения. Например. если проект AnyCPU .EXE ссылается на проект x86 .DLL, он успешно запустится в 32-битной Windows, но завершится ошибкой выполнения в 64-битной Windows.


Вопрос касается Visual Studio 2008, но Visual Studio 2012 с .NET 4.5 представила любая настройка cpu32bitpreferred:

anycpu32bitpreferred компилирует вашу сборку для запуска на любой платформе. Ваше приложение работает в 32-разрядном режиме в системах, поддерживающих как 64-разрядные, так и 32-разрядные приложения. Этот параметр можно указать только для проектов, предназначенных для .NET Framework 4.5.

Включение этого параметра (по умолчанию в Visual Studio) означает, что AnyCPU приложения будут выполняться как 32-разрядные даже в 64-разрядной операционной системе.

person Martin Liversage    schedule 04.07.2012
comment
Все проекты устанавливаются на AnyCPU вместе с целевой платформой проекта .EXE. Но мое приложение работает в 32-битном режиме, как показано в диспетчере задач. Кроме того, это происходит из-за того, что он не может получить доступ к 32-битному DSN клиента IBM DB2 Server во время выполнения, как вы сказали. - person nishantv; 04.07.2012
comment
@nishantv: документация находится здесь: msdn.microsoft.com/en-us/ библиотека/zekwfyz4.aspx. Кажется, что либо документация неверна, либо есть что-то в вашем конце, что вы упустили из виду. - person Martin Liversage; 04.07.2012

Поскольку VS2008 является 32-битным, я ожидаю, что он также запустит 32-битный процесс. Другая причина может заключаться в том, что вы ссылаетесь только на 32-разрядные библиотеки DLL?

Вы пытались запустить приложение вне VS2008 - оно все еще в 32-битном режиме?

person Thorsten Dittmar    schedule 04.07.2012
comment
да все dll тоже 32 битные. Я также получаю доступ к клиенту IBM Data Server версии 9.5.3, но мне не удается найти или загрузить зарегистрированный поставщик данных .Net Framework. . Я пытаюсь обойти эту проблему, которая, как я думал, связана с конфликтом 32-бит-64-бит. Вы имеете представление об этом? - person nishantv; 04.07.2012
comment
Что ж, если вы ссылаетесь на 32-разрядные библиотеки DLL (не AnyCPU или X64), приложение будет работать в 32-разрядном режиме, поскольку вы не можете использовать 32-разрядные библиотеки DLL в 64-разрядном приложении и наоборот. - person Thorsten Dittmar; 04.07.2012

  1. Перейдите в Сборка => Диспетчер конфигураций.
  2. Щелкните раскрывающийся список Active Solution Platform и выберите .
  3. В раскрывающемся списке «Тип или выберите новую платформу» выберите «x64».
  4. Нажмите ОК.
person Mayur Gondaliya    schedule 04.07.2012
comment
Любой процессор так же хорош - он должен запускать приложение в 64-битном режиме на 64-битных системах и в 32-битном режиме на 32-битных системах. Если вы не ссылаетесь на что-то, что переводит приложение в 32-битный режим. Если сделать его 64-битным, это только предотвратит его работу в 32-битной системе. - person Thorsten Dittmar; 04.07.2012
comment
@Mayur Я сделал то, что вы сказали, но выбрал x86. Мое приложение теперь успешно работает на 64-битной машине с доступом к 32-битному dsn с использованием vs2008. Мой вопрос: нужно ли мне делать это для всех приложений вручную, чтобы работать? Каково общее решение? - person nishantv; 04.07.2012
comment
Приложение, специально скомпилированное для X86, не может работать в 64-битном режиме - здесь должна быть некоторая путаница... - person Thorsten Dittmar; 05.07.2012