Как заставить исполняемый файл .NET работать как 32-разрядный процесс в 64-разрядной ОС? - PullRequest
2 голосов
/ 16 марта 2011

Я хочу, чтобы мое приложение .NET работало как 32-разрядный процесс на 64-разрядной машине с .NET1.1.Опция целевой платформы была представлена ​​в более поздних версиях VS (2005), но я использую VS2003 и .NET1.1 и не имею возможности использовать другие VS или .Net

Возможно ли это?

PS Я не знаю, относится ли это к делу, но мой коллега сказал, что я должен использовать "cor flags" или "core flags", но поиск в Google не дал каких-либо интересных результатов

Ответы [ 5 ]

3 голосов
/ 16 марта 2011

Вы можете указать Windows запускать приложение как 32-разрядное.

Попробуйте: corflags myassembly.exe /32bit+

См. документы утилиты corflags.exe .

StackOverflow имеет отличную сводку CorFlags здесь.

2 голосов
/ 16 марта 2011

Вам не нужно ничего делать. .NET 1.1 не поддерживает запуск управляемого кода в 64-битном режиме. Это не стало доступным до .NET 2.0. Любая сборка EXE, скомпилированная с VS2003, запросит версию CLR 1.1, она автоматически запускает управляемый код в 32-битном режиме.

Точно так же у вас не будет утилиты Corflags.exe. Первоначально он поставлялся с .NET 2.0 SDK, в настоящее время с Windows SDK. Visual Studio 2005 и выше позволяет вам установить бит опции в заголовке cor, которым Corflags.exe манипулирует, позволяя вам выбрать «цель платформы» в опциях проекта.

Не упустите 64-битные машины, на которых не установлен .NET 1.1. Они будут запускать ваше приложение с CLR версии 2, и оно будет работать в 64-битном режиме. UAC, реализованный в Vista и более поздних версиях, также может вызвать проблемы, ваш EXE-файл не будет иметь манифеста, и Windows будет рассматривать его как устаревшую программу. Который может быть очень трудно диагностировать, когда это не работает хорошо. И VS2003 не поддерживается в операционных системах после XP. Существует список дефектов, большинство из которых являются проблемами отладки. Поддержание ваших инструментов в актуальном состоянии с учетом возможностей операционной системы вашего клиента, между прочим, очень важно, 8 лет - это долгие годы собак и программных инструментов.

2 голосов
/ 16 марта 2011

Вероятно, вам придется использовать компилятор вручную и указать целевую платформу:

http://msdn.microsoft.com/en-us/library/zekwfyz4(v=vs.80).aspx

0 голосов
/ 16 марта 2011

Разве это не должно делать это, ничего не делая?1.1 был только 32 бита.Если .NET 1.1 нет, ваша программа будет работать с текущей версией, но, возможно, инфраструктура достаточно умна, чтобы знать, что приложение 1.1 может работать только на 32 битах.

В противном случае вы можете попробовать установить 1.1на компьютере, поэтому ваше приложение будет привязано к нему и будет работать только на 32 битах.

http://technet.microsoft.com/en-us/library/cc785813(WS.10).aspx

Это, кажется, подтверждает мою теорию:

http://blogs.artinsoft.net/pdermody/archive/2005/04/07/153.aspx

Загрузка приложений .NET 1.1 в 64-битной Windows

Я с удивлением обнаружил - и вы, возможно, удивитесь, услышав - что Microsoft решила не допускать даже чистого .NETприложения, созданные на 32-разрядных компьютерах с определенными версиями Visual Studio, для запуска на 64-разрядном CLR.

0 голосов
/ 16 марта 2011

В диспетчере конфигурации вы должны иметь возможность выбрать платформу в качестве x86 - что, как я полагаю, делает это, поскольку я не могу думать ни о чем другом, для чего это хорошо.

Редактировать: О, так это оптимизация . Черт, теперь у меня никогда не будет круглого числа для моей репутации ...

...