Quiero que mi aplicación WPF abra el navegador predeterminado y vaya a una determinada página web. ¿Cómo puedo hacer eso?
Quiero que mi aplicación WPF abra el navegador predeterminado y vaya a una determinada página web. ¿Cómo puedo hacer eso?
Respuestas:
System.Diagnostics.Process.Start("http://www.webpage.com");
Una de muchas maneras.
La respuesta aceptada ya no funciona en .NET Core 3 . Para que funcione, use el siguiente método:
var psi = new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
};
Process.Start (psi);
Si bien se ha dado una buena respuesta (usando Process.Start
), es más seguro encapsularla en una función que verifique que la cadena pasada sea de hecho un URI, para evitar iniciar accidentalmente procesos aleatorios en la máquina.
public static bool IsValidUri(string uri)
{
if (!Uri.IsWellFormedUriString(uri, UriKind.Absolute))
return false;
Uri tmp;
if (!Uri.TryCreate(uri, UriKind.Absolute, out tmp))
return false;
return tmp.Scheme == Uri.UriSchemeHttp || tmp.Scheme == Uri.UriSchemeHttps;
}
public static bool OpenUri(string uri)
{
if (!IsValidUri(uri))
return false;
System.Diagnostics.Process.Start(uri);
return true;
}
Microsoft lo explica en el artículo KB305703 sobre Cómo iniciar el navegador de Internet predeterminado mediante programación utilizando Visual C # .
No olvides consultar la sección Solución de problemas.
No puede iniciar una página web desde una aplicación elevada. Esto generará una excepción 0x800004005, probablemente porque explorer.exe y el navegador se ejecutan sin elevación.
Para iniciar una página web desde una aplicación elevada en un navegador web no elevado, utilice el código creado por Mike Feng . Traté de pasar la URL a lpApplicationName pero eso no funcionó. Tampoco cuando uso CreateProcessWithTokenW con lpApplicationName = "explorer.exe" (o iexplore.exe) y lpCommandLine = url.
La siguiente solución funciona: Cree un pequeño proyecto EXE que tenga una tarea: Process.Start (url), use CreateProcessWithTokenW para ejecutar este .EXE. En mi Windows 8 RC esto funciona bien y abre la página web en Google Chrome.
Explorer.exe
no se admite el uso de la elevación: "Desafortunadamente, el equipo de Windows Shell ha respondido que el comportamiento actual de" Explorer.exe AppName.exe "es un error y puede no funcionar en futuras actualizaciones / versiones de Windows. Aplicaciones no debe confiar en ello ".
Aquí está mi código completo de cómo abrir.
hay 2 opciones:
abrir usando el navegador predeterminado (el comportamiento es como abrir dentro de la ventana del navegador)
abrir a través de las opciones de comando predeterminadas (el comportamiento es como si usara el comando "RUN.EXE")
abrir a través de 'explorer' (el comportamiento es como si escribieras la URL dentro de la ventana de la carpeta)
[sugerencia opcional] 4. utilice la ubicación del proceso iexplore para abrir la url requerida
internal static bool TryOpenUrl(string p_url)
{
// try use default browser [registry: HKEY_CURRENT_USER\Software\Classes\http\shell\open\command]
try
{
string keyValue = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Classes\http\shell\open\command", "", null) as string;
if (string.IsNullOrEmpty(keyValue) == false)
{
string browserPath = keyValue.Replace("%1", p_url);
System.Diagnostics.Process.Start(browserPath);
return true;
}
}
catch { }
// try open browser as default command
try
{
System.Diagnostics.Process.Start(p_url); //browserPath, argUrl);
return true;
}
catch { }
// try open through 'explorer.exe'
try
{
string browserPath = GetWindowsPath("explorer.exe");
string argUrl = "\"" + p_url + "\"";
System.Diagnostics.Process.Start(browserPath, argUrl);
return true;
}
catch { }
// return false, all failed
return false;
}
internal static string GetWindowsPath(string p_fileName)
{
string path = null;
string sysdir;
for (int i = 0; i < 3; i++)
{
try
{
if (i == 0)
{
path = Environment.GetEnvironmentVariable("SystemRoot");
}
else if (i == 1)
{
path = Environment.GetEnvironmentVariable("windir");
}
else if (i == 2)
{
sysdir = Environment.GetFolderPath(Environment.SpecialFolder.System);
path = System.IO.Directory.GetParent(sysdir).FullName;
}
if (path != null)
{
path = System.IO.Path.Combine(path, p_fileName);
if (System.IO.File.Exists(path) == true)
{
return path;
}
}
}
catch { }
}
// not found
return null;
}
Espero haber ayudado.
GetWindowsPath
?
La vieja escuela;)
public static void openit(string x) {
System.Diagnostics.Process.Start("cmd", "/C start" + " " + x);
}
Utilizar: openit("www.google.com");
Tengo la solución para esto porque hoy tengo un problema similar.
Supongamos que desea abrir http://google.com desde una aplicación que se ejecuta con privilegios de administrador:
ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe", "http://www.google.com/");
Process.Start(startInfo);