Преобразование .net приложения 32-разрядных в 64-разрядные - PullRequest
6 голосов
/ 16 августа 2011

У меня есть приложение .net,

  • Библиотека классов (Целевая платформа установлена ​​на Любой ЦП )
  • Приложение Winform (Целевая платформа установлена ​​на Любой ЦП )
  • Установщик (Целевая платформа установлена ​​на X86 и Обнаруженные зависимости установлены для .net framework (x86))

Теперь, когда я устанавливаю это приложение через setup.exe на 64-битном компьютере, оно устанавливается в папку Program Files [x86]; Я предполагаю, что это особенность WoW64 эмуляции 32-битной среды в 64-битном приложении.

Теперь, когда клиент просит преобразовать его в 64-разрядную версию, почему для него имеет значение, что сама 32-разрядная версия работает нормально через WoW64? будет ли преобразование его в 64-разрядную версию с точки зрения производительности?

И когда я пытаюсь преобразовать его в 64-разрядную версию, нужно ли мне изменить его для всех, т. Е.

  • Библиотека классов (измените целевую платформу на 64) (Что если я пропущу этот шаг?)
  • Приложение Winform (измените целевую платформу на 64) (Что, если я тоже пропущу это?)
  • Установщик (измените целевую платформу на 64) [Список обнаруженных зависимостей не показывает никакой опции .NET Framework x64, почему?]

Пожалуйста, предложите.

Ответы [ 4 ]

7 голосов
/ 16 августа 2011

Преобразование не требуется, ваше приложение уже работает как 64-битный процесс.Потому что вы использовали AnyCPU в проекте EXE.Вы установили его в неправильную папку, но это не имеет большого значения, если никакой другой процесс не пытается запустить ваш программно.Это чрезвычайно редко.

Проверьте это на TaskMgr.exe, вкладка Процессы.32-битный процесс имеет * 32 после имени процесса.

Сделайте клиента счастливым, изменив настройку TargetPlatform проекта установки на x64, чтобы он устанавливался в файлы c: \ program.Занимает несколько минут.

4 голосов
/ 16 августа 2011

Вы можете оставить проекты .NET-кода в AnyCPU, однако для установки на 64-разрядную версию без использования 32-разрядных WOW-компонентов необходимо изменить упомянутое вами свойство проекта программы установки.

Если в установщике есть пользовательские действия, они могут не работать при переходе на 64-разрядную версию. Вы можете получить BadImageFormatException. Чтобы решить эту проблему, вам нужно использовать полученный MSI:

http://adamhouldsworth.blogspot.com/2010/10/64bit-custom-actions.html

Клиент не будет иметь большого значения, если ваше приложение будет автономным. Бесплатного выигрыша в производительности, кроме доступа к большему объему ОЗУ, при переходе на 64-битный режим нет (хотя JIT имеет различные типы оптимизации).

Единственная ситуация, в которой я видел 64-битную версию, это когда вы используете эту DLL в другом приложении, вы не можете смешивать битность в одном процессе.

Обновление: возможно, отсутствие необходимого условия для 64-битной среды связано с тем, что вы используете VS 2005?

http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/7b00f4e9-64e3-4fb6-9906-880820ecda92

3 голосов
/ 16 августа 2011

Теперь, когда я устанавливаю это приложение через setup.exe на 64-разрядной машине, оно устанавливается в папку Program Files [x86];Я предполагаю, что это особенность WOW эмуляции 32-битной среды в 64-битном приложении.

Нет, это НИЧЕГО не имеет с программой, только с установщиком.

• Установщик (для Целевой платформы установлено значение X86 и Определенные зависимости установлены для .net framework (x86))

32-разрядный установщик устанавливает его в 32-разрядную папку для программ, независимо от того, установлена ​​ли программа32 или 64 бита.

К сожалению, вы не можете сделать так, чтобы один установщик выполнял оба - вам нужен установщик для 32 и один для 64-битной концепции.

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

2 голосов
/ 16 августа 2011

64 бит может или не может дать различия в производительности. 64-разрядное приложение также может использовать (в некотором роде) больше памяти, чем 32-разрядное приложение.

Если вы запускаете AnyCpu exe на 64-битной ОС, он должен запускаться на 64-битной (см. В диспетчере задач, к 32-битным процессам добавляется * 32). Если вы установите приложение на x64, библиотека должна быть x64 или AnyCpu.

Если у вас нет собственных ссылок только для x64, вы можете оставить свои exe и dll как AnyCpu, но вам нужно будет изменить настройки на x64.

Что касается инфраструктуры, на компьютере с архитектурой x64 (который в любом случае будет запускать приложение x64) платформа всегда включает как 32-разрядные, так и 64-разрядные версии, которые находятся в C: \ Windows \ Microsoft.NET \ Framework и Framework64. соответственно.

...