Через некоторое время тестирования лучший способ определить браузер по умолчанию следующий:
ПРИМЕЧАНИЕ: это странно, но это правда ...
Нечего сказать, что приложение является приложением по умолчанию для
какой-то тип файла или веб-протокол, например «http». Что важно для определения дефолта
веб-браузер - это то, что зарегистрировано в пункте меню «Пуск» (см. раздел «Рег» ниже).
Так что забудьте все HKCR \ http, HKCU \ Software \ Classes \ http, HKLM \ Software \ Classes \ http и их друзей.
- чтение из "HKEY_CURRENT_USER \ Software \ Clients \ StartMenuInternet"
- чтение командной строки из "HKEY_LOCAL_MACHINE \ Software \ Clients \ StartMenuInternet \\ shell \ open \ command"
- усечь командную строку после ".exe"
Конечно, сначала нужно выдать себя за зарегистрированного пользователя.
Если это решение не работает (как с w2k), используйте обработчик для протокола http.
Чтобы фактически запустить браузер по умолчанию из службы, мы используем дополнительный процесс, который находится внутри службы с использованием пользовательского контекста, вошедшего в систему. Этот процесс запускает приведенную выше командную строку (используя ShellExecute на платформах> = Vista). Обязательно используйте тот же уровень целостности (средний), что и у пользователя по умолчанию (иначе IE не будет работать, потому что он использует DDE).
НТН.