Как выбрать правильные аргументы для собственной функции Windows в нескольких версиях - PullRequest
0 голосов
/ 01 ноября 2018

Я пишу библиотеку классов, которая требует от меня использования WinHttpOpen через Interop. Подпись функции выглядит следующим образом

WINHTTPAPI HINTERNET WinHttpOpen(
  LPCWSTR pszAgentW,
  DWORD   dwAccessType,
  LPCWSTR pszProxyW,
  LPCWSTR pszProxyBypassW,
  DWORD   dwFlags
);

В документации четко указано, что для параметра dwAccessType.

WINHTTP_ACCESS_TYPE_DEFAULT_PROXY

Внимание! Использование этой опции не рекомендуется в Windows 8.1 и новее. Вместо этого используйте WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY.

Так что я могу использовать WINHTTP_ACCESS_TYPE_DEFAULT_PROXY до Windows 8.1

WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY

Используются системные настройки и настройки прокси-сервера для каждого пользователя (включая Интернет). Конфигурация прокси-сервера Explorer), чтобы определить, какие прокси / прокси использовать. Автоматически пытается обработать аварийное переключение между несколькими прокси, различные конфигурации прокси для интерфейса и аутентификации. Поддерживается в Windows 8.1 и новее.

и WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY начиная с Windows 8.1

Проблема в том, что моя библиотека классов должна работать в каждой версии Windows, начиная с 7 SP1.

Я пытался проверить версию Windows, используя Environment.OSVersion, но получаю неправильную версию, потому что:

Свойство OSVersion сообщает об одном и том же номере версии (6.2.0.0) для Windows 8 и Windows 8.1 и об одном и том же номере основной и вспомогательной версии для Windows 10.

Чтобы это исправить, мне нужно добавить файл манифеста приложения во все приложения, которые используют мою библиотеку (насколько я понимаю, нет способа создать файл манифеста приложения из библиотеки классов)

Как узнать, какое значение я должен использовать для dwAccessType, чтобы мое приложение работало как на Windows 7, так и на 10?

...