Портирование приложения C ++ с XP на Vista / 7 - PullRequest
1 голос
/ 11 декабря 2010

У меня есть приложение C ++, которое я написал для Windows XP, и я хотел бы перенести его для использования в Windows Vista / 7.Он использует некоторые MFC (для последовательного ввода-вывода) и ATL (для WMI), но в первую очередь использует хороший старый Windows API.О чем я должен помнить при переносе приложения?Спасибо.

Ответы [ 3 ]

8 голосов
/ 11 декабря 2010

Вам, вероятно, вообще ничего не нужно делать. В общем, приложения, написанные для XP, отлично работают на Vista и Windows 7. (Драйверы устройств и другой подобный низкоуровневый код могут быть другой историей.)

У вас проблемы с запуском в Vista или Windows 7? Вы даже пробовали?

Некоторые возможные ошибки:

  • безопасность (ваше приложение предполагает, что оно работает от имени администратора и имеет полный контроль над машиной?)
  • косметические проблемы (из-за изменений в окне и внешнем виде управления в Vista и 7)
  • жестко заданные пути к файлам / каталогам
  • гораздо больше пользователей используют 64-разрядные версии Windows Vista и 7, чем когда-либо использовали 64-разрядные XP. Поэтому, если у вас 32-разрядное приложение и вы динамически загружаете код (библиотеки DLL, элементы управления ActiveX и т. Д.), Вы можете столкнуться с проблемами 32-разрядных-64-разрядных.
6 голосов
/ 11 декабря 2010

Набор средств для обеспечения совместимости приложений поможет вам определить проблемы, с которыми ваше приложение может портировать на Vista / Win 7:

http://www.microsoft.com/downloads/en/details.aspx?familyid=c4a25ab9-649d-4a1b-b4a7-c9d8b095df18&displaylang=en

2 голосов
/ 11 декабря 2010

Я бы поддержал предложение Майкла Барра использовать инструментарий AppCompat, поскольку это определит большинство вероятных проблем. Некоторые общие правила:

  • Не записывайте данные в HKLM, кроме как в установщике. Используйте HKCU. Любое чтение / запись в HKLM может быть виртуализированным , и вы можете получить очень странное поведение при переключении между учетными записями пользователей
  • Не используйте жестко закодированные пути, используйте SHGetFolderLocation
  • Не записывать данные в системные области, такие как c:\windows, c:\program files и т. Д. Если вам нужно записать данные, которые должны быть доступны для всех пользователей, используйте CSIDL_COMMON_APPDATA (по умолчанию c:\ProgramData)

Если предположить, что в любом случае вы делаете большинство этих вещей правильно, то я думаю, что у вас не возникнет серьезных проблем с поддержкой Vista / Win7.

...