2008-10-09 9 views
4

Может ли приложение WinForms скомпилировано для «Any CPU» настроено на запуск как «x86» на 64-битном сервере без повторной компиляции приложения? В частности, я ищу параметр app.config или апплет панели управления для достижения этой цели. Все клиенты клиента - x86, но сервер x64, и нам нравится устанавливать приложение WinForms на сервере для администраторов для настройки и мониторинга системы. Мы бы скорее не перекомпилировали только сервер.Может ли приложение WinForms быть настроено на запуск как «x86» без перекомпиляции?

ответ

11

От http://www.request-response.com/blog/PermaLink,guid,34966ef8-3142-46b2-84e0-372b5c36ddcc.aspx

Вы можете, однако, контроль и переопределить поведение по умолчанию, даже после того, как код был скомпилирован. Есть удобный инструмент под названием corflags.exe, присутствующий в SDK, который позволяет принудительно скомпилировать код «anycpu» для использования 32-битного процесса в 64-разрядном мире.

Использование этой утилиты можно найти здесь http://msdn.microsoft.com/en-us/library/ms164699(VS.80).aspx

+0

Я попробовал это на сервере нашего клиента, и он работал с триумфом! Благодарю. Моя единственная жалоба заключается в том, что для установки Windows SDK на компьютере под управлением Windows Server 2003 потребовалось время от времени. – flipdoubt 2008-10-09 20:43:38

1

Нет конфигурации должны быть необходимы, если вы написали свой управляемый код правильно. Пока на 64-битной машине установлены надлежащие рамки, процесс JIT позаботится о любых различиях между 32 и 64-битными требованиями.

Единственное, что вам нужно беспокоиться в своем собственном коде, это если вы делали P/Invoke. В этом случае, когда вы вызываете функцию API, которая использует тип HANDLE или void *, вам необходимо убедиться, что вы всегда используете System.IntPtr, а не System.Int32. В мире .NET тип данных int ВСЕГДА 32 бит, даже на 64-битной машине. Точно так же длинный всегда 64 бит, независимо от архитектуры.

И IntPtr, однако, всегда имеет размер void *, и поэтому надлежащим образом JIT имеет разные размеры в зависимости от архитектуры машины, на которой вы работаете.