Saya ingin membuat aplikasi WPF saya membuka browser default dan membuka halaman web tertentu. Bagaimana aku melakukan itu?
Saya ingin membuat aplikasi WPF saya membuka browser default dan membuka halaman web tertentu. Bagaimana aku melakukan itu?
Jawaban:
System.Diagnostics.Process.Start("http://www.webpage.com");
Salah satunya.
Jawaban yang diterima tidak lagi berfungsi di .NET Core 3 . Untuk membuatnya berhasil, gunakan metode berikut:
var psi = new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
};
Process.Start (psi);
Meskipun jawaban yang bagus telah diberikan (menggunakan Process.Start
), akan lebih aman untuk merangkumnya dalam fungsi yang memeriksa bahwa string yang diteruskan memang URI, untuk menghindari memulai proses acak pada mesin secara tidak sengaja.
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 menjelaskannya di artikel KB305703 tentang Cara memulai peramban Internet default secara terprogram menggunakan Visual C # .
Jangan lupa untuk memeriksa bagian Troubleshooting.
Anda tidak dapat meluncurkan halaman web dari aplikasi yang ditinggikan. Ini akan memunculkan pengecualian 0x800004005, mungkin karena explorer.exe dan browser sedang berjalan non-elevasi.
Untuk meluncurkan halaman web dari aplikasi yang ditinggikan di browser web non-elevasi, gunakan kode yang dibuat oleh Mike Feng . Saya mencoba meneruskan URL ke lpApplicationName tetapi tidak berhasil. Juga tidak ketika saya menggunakan CreateProcessWithTokenW dengan lpApplicationName = "explorer.exe" (atau iexplore.exe) dan lpCommandLine = url.
Solusi berikut ini berhasil: Buat proyek EXE kecil yang memiliki satu tugas: Process.Start (url), gunakan CreateProcessWithTokenW untuk menjalankan .EXE ini. Di Windows 8 RC saya, ini berfungsi dengan baik dan membuka halaman web di Google Chrome.
Explorer.exe
untuk menurunkan tidak didukung: "Sayangnya, tim Windows Shell telah menjawab bahwa perilaku saat ini" Explorer.exe AppName.exe "adalah bug dan mungkin tidak berfungsi di pembaruan / versi Windows mendatang. Aplikasi seharusnya tidak mengandalkannya. "
Ini kode lengkap saya cara membukanya.
ada 2 pilihan:
buka menggunakan browser default (perilaku seperti dibuka di dalam jendela browser)
buka melalui opsi perintah default (perilakunya seperti Anda menggunakan perintah "RUN.EXE")
buka melalui 'explorer' (perilakunya seperti Anda menulis url di dalam url jendela folder Anda)
[saran opsional] 4. gunakan lokasi proses iexplore untuk membuka url yang diperlukan
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;
}
Semoga saya membantu.
GetWindowsPath
?
Cara sekolah lama;)
public static void openit(string x) {
System.Diagnostics.Process.Start("cmd", "/C start" + " " + x);
}
Menggunakan: openit("www.google.com");
Saya memiliki solusi untuk ini karena saya memiliki masalah serupa hari ini.
Misalkan Anda ingin membuka http://google.com dari aplikasi yang berjalan dengan hak istimewa admin:
ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe", "http://www.google.com/");
Process.Start(startInfo);