Подводные камни режима совместимости с Windows

У нас есть приложение VB6, которое мы переносим с Windows XP на Windows 7, и мы столкнулись с несколькими проблемами. Некоторые из этих проблем исчезнут, если мы установим для режима совместимости приложения значение Windows XP (Service Pack 3).

Мне интересно, является ли просто запуск нашего приложения в режиме совместимости хорошим решением или нет. Я немного погуглил и не нашел ничего, что указывало бы на наличие недостатков в использовании режима совместимости. Но большинство людей используют его для приложений, которые они не разрабатывают.

Долгосрочная цель состоит в том, чтобы заменить весь код VB6 на C#, но это потребует времени. Возможно, использование режима совместимости при замене VB6 не так уж и плохо.

Кто-нибудь имел опыт разработки приложения и преднамеренного запуска его в режиме совместимости? Моя интуиция говорит, что это плохая идея, но я не могу найти никаких доказательств против ее использования.


person Ecyrb    schedule 11.04.2014    source источник
comment
Это заставляет код, который был написан с несколькими неверными предположениями, продолжать работать. Даже переписав на C#, вам придется исправить эти предположения, а для этого нужно выяснить, что они из себя представляют, где находятся в коде и т. д. Другими словами, правильно написанный код VB6 также не нуждается ни в одной из этих прокладок appcompat.   -  person Bob77    schedule 12.04.2014


Ответы (2)


Есть потребительские приложения (режим совместимости действительно плохая идея) и бизнес-приложения — вы делаете то, что вам нужно. Вы контролируете окружающую среду.

Это то, что делает WinXPSP2 (у меня нет опции SP3 в Vista).

DirectXVersionLie
ElevateCreateProcess
EmulateSorting
EnableLegacyExceptionHandlinginOLE
FailObsoleteShellAPIs
GlobalMemoryStatus2GB
HandleBadPtr
HardwareAudioMixer
LoadLibraryCWD
NoGhost
RedirectMP3Codec
VirtualRegistry
WinXPSP2VersionLie

Хорошим предположением является то, что ваше приложение должно работать с повышенными правами (№ 2 в списке выше).

Кстати, при запуске процесса он запускает его нормально, и если (функция завершения, которая это делает) createprocess терпит неудачу с ElevationRequired, он перезапускает его с повышенными правами.

person tony bd    schedule 11.04.2014

У меня есть старое приложение vb6, которое мне недавно пришлось заставить работать на 64-битной версии win7. Запуск в режиме xp был частью решения. У меня были другие проблемы со старым установщиком, и мне нужно было запустить regsvr32.exe против windows\sysWOW64\ с помощью командной строки с повышенными привилегиями. Мне также нужно было войти в систему как администратор, чтобы установить, так как простой запуск программы установки от имени администратора не работал. Регистрация компонентов заняла 45 минут или около того, но в итоге все в порядке. Надеюсь, это поможет. ура Дэйв

person MrTea    schedule 15.04.2014