У меня есть приложение на C++, которое я написал для Windows XP, и я хотел бы перенести его для использования в Windows Vista/7. Он использует некоторые MFC (для последовательного ввода-вывода) и ATL (для WMI), но в основном использует старый добрый Windows API. О каких недостатках я должен помнить при переносе своего приложения? Спасибо.
Портирование приложения C++ с XP на Vista/7
Ответы (3)
Вам, наверное, вообще ничего не нужно делать. В общем, приложения, написанные для XP, прекрасно работают в Vista и Windows 7. (Драйверы устройств и другой такой низкоуровневый код могут быть другой историей.)
У вас проблемы с запуском в Vista или Windows 7? Вы хоть пробовали?
Некоторые возможные ошибки:
- безопасность (предполагает ли ваше приложение, что оно работает от имени администратора и имеет полный контроль над машиной?)
- косметические проблемы (из-за изменений внешнего вида окон и элементов управления в Vista и 7)
- жестко заданные пути к файлам/каталогам
- гораздо больше пользователей используют 64-битные версии Windows Vista и 7, чем когда-либо использовали 64-битную XP. Таким образом, если у вас есть 32-разрядное приложение и вы динамически загружаете код (DLL, элементы управления ActiveX и т. д.), вы можете столкнуться с проблемами 32-разрядных и 64-разрядных версий.
Набор инструментов для обеспечения совместимости приложений поможет вам выявить проблемы, которые могут возникнуть при переносе вашего приложения на Vista/Win 7:
Я бы поддержал предложение Майкла Берра использовать инструментарий AppCompat, так как он выявит большинство вероятных проблем. Некоторые общие правила:
- Не записывайте данные в HKLM, кроме как в установщике. Используйте ХККУ. Любые операции чтения/записи в HKLM могут быть виртуализированы, и вы можете получить очень странные результаты. поведение при переключении между учетными записями пользователей
- Не используйте жестко заданные пути, используйте SHGetFolderLocation а>
- Не записывайте данные в системные области, такие как
c:\windows
,c:\program files
и т. д. Если вам нужно записать данные, которые должны быть доступны всем пользователям, используйтеCSIDL_COMMON_APPDATA
(по умолчаниюc:\ProgramData
)
Предполагая, что вы все равно делаете большинство из этих вещей правильно, я думаю, у вас не будет серьезных проблем с поддержкой Vista/Win7.