WPF uygulamamın varsayılan tarayıcıyı açmasını ve belirli bir web sayfasına gitmesini istiyorum. Bunu nasıl yaparım?
WPF uygulamamın varsayılan tarayıcıyı açmasını ve belirli bir web sayfasına gitmesini istiyorum. Bunu nasıl yaparım?
Yanıtlar:
System.Diagnostics.Process.Start("http://www.webpage.com");
Birçok yoldan biri.
Kabul edilen yanıt artık .NET Core 3 üzerinde çalışmıyor . Çalışmasını sağlamak için aşağıdaki yöntemi kullanın:
var psi = new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
};
Process.Start (psi);
İyi bir cevap verilmiş olsa da (kullanılarak Process.Start), makinede kazara rastgele işlemlerin başlamasını önlemek için, aktarılan dizenin gerçekten bir URI olduğunu kontrol eden bir işlevde kapsüllemek daha güvenlidir.
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 bunu, Visual C # kullanarak varsayılan İnternet tarayıcısını programlı olarak başlatma konulu KB305703 makalesinde açıklamaktadır .
Sorun Giderme bölümünü kontrol etmeyi unutmayın.
Yükseltilmiş bir uygulamadan bir web sayfası başlatamazsınız. Muhtemelen explorer.exe ve tarayıcı yükseltilmemiş olarak çalıştığından, bu bir 0x800004005 istisnası ortaya çıkaracaktır.
Yükseltilmemiş bir web tarayıcısında yükseltilmiş bir uygulamadan bir web sayfası başlatmak için Mike Feng tarafından yapılan kodu kullanın . URL'yi lpApplicationName'e iletmeye çalıştım ama bu işe yaramadı. Ayrıca CreateProcessWithTokenW'yi lpApplicationName = "explorer.exe" (veya iexplore.exe) ve lpCommandLine = url ile kullandığımda da değil.
Aşağıdaki geçici çözüm işe yarıyor: Bir görevi olan küçük bir EXE projesi oluşturun: Process.Start (url), bu .exe dosyasını çalıştırmak için CreateProcessWithTokenW kullanın. Windows 8 RC'imde bu iyi çalışıyor ve web sayfasını Google Chrome'da açar.
Explorer.exede-yüceltiliyorlar için desteklenmez: Explorer.exe AppName.exe 'bir hata olduğunu "Maalesef, Windows Shell ekibi mevcut davranış olduğunu yanıtını verdi' ve olmayabilir gelecekteki güncellemeler / Windows sürümlerinde çalışması Uygulamaları. ona güvenmemeli. "
İşte tam kodum nasıl açılacağı.
2 seçenek vardır:
varsayılan tarayıcı kullanarak açın (davranış, tarayıcı penceresinin içinde açıldığı gibidir)
varsayılan komut seçenekleri aracılığıyla açın (davranış, "RUN.EXE" komutunu kullandığınız gibidir)
'gezgin' aracılığıyla aç (davranış, klasör pencerenizin url'sine url yazdığınız gibidir)
[isteğe bağlı öneri] 4. gerekli url'yi açmak için iexplore işlem konumunu kullanın
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;
}
Umarım yardım etmişimdir.
GetWindowsPath?
Eski okul yolu;)
public static void openit(string x) {
System.Diagnostics.Process.Start("cmd", "/C start" + " " + x);
}
kullanın: openit("www.google.com");
Bugün benzer bir problemim olduğu için bunun için bir çözümüm var.
Yönetici ayrıcalıklarıyla çalışan bir uygulamadan http ://google.com'u açmak istediğinizi varsayalım:
ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe", "http://www.google.com/");
Process.Start(startInfo);