Detectando navegadores instalados para que o Process.Start (“chrome”) não apresente erro

Estou tentando deixar o usuário escolher o navegador que meu aplicativo usa para iniciar urls. Atualmente, ele usa o navegador padrão, mas algumas pessoas querem especificar um navegador diferente.

Gostaria de mostrar apenas os navegadores instalados na lista e estou lançando-os assim:

Process.Start (“chrome”, url);

O problema é que, se o Chrome não estiver instalado (e no caminho), ele falhará.

Como posso verificar se esta chamada falhará, sem chamá-la (para que eu possa pré-filtrar minha lista e remover o chrome se isso não funcionar)?

No Windows, todos os aplicativos instalados têm uma chave na chave de registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths . Uma solução seria iterar todas as inputs dessa chave e ver se elas correspondem aos nomes dos navegadores suportados.

Depois de obter as chaves do registro para cada navegador, você poderá obter o valor do Path de cada chave e verificar se o arquivo executável existe no caminho especificado.

Uma coisa a notar é que, nas versões de 64 bits do Windows, os aplicativos de 32 bits são listados nos HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\App Paths .

Você poderia embrulhar Process.Start("chrome", url); em um try/catch (capturando a exceção lançada quando o navegador não está instalado)

Bondade,

Dan