मैं अपने WPF एप्लिकेशन को डिफ़ॉल्ट ब्राउज़र खोलना चाहता हूं और एक निश्चित वेब पेज पर जाना चाहता हूं। मैं उसको कैसे करू?
मैं अपने WPF एप्लिकेशन को डिफ़ॉल्ट ब्राउज़र खोलना चाहता हूं और एक निश्चित वेब पेज पर जाना चाहता हूं। मैं उसको कैसे करू?
जवाबों:
System.Diagnostics.Process.Start("http://www.webpage.com");
कई तरीकों में से एक।
स्वीकृत उत्तर अब .NET कोर 3 पर काम नहीं करता है । इसे काम करने के लिए, निम्न विधि का उपयोग करें:
var psi = new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
};
Process.Start (psi);
हालांकि एक अच्छा जवाब दिया गया है (उपयोग करते हुए Process.Start
), यह एक फ़ंक्शन में इसे एनकैप्सूलेट करने के लिए सुरक्षित है जो जांचता है कि पारित स्ट्रिंग वास्तव में एक यूआरआई है, मशीन पर गलती से शुरू होने वाली प्रक्रियाओं से बचने के लिए।
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 इसे Visual C # का उपयोग करके प्रोग्रामेटिक रूप से डिफ़ॉल्ट इंटरनेट ब्राउज़र कैसे शुरू करें , इस पर KB305703 लेख में बताता है ।
समस्या निवारण अनुभाग की जाँच करना न भूलें।
आप एक उन्नत एप्लिकेशन से वेब पेज लॉन्च नहीं कर सकते। यह एक 0x800004005 अपवाद को बढ़ाएगा, शायद इसलिए क्योंकि explorer.exe और ब्राउज़र गैर-उन्नत चल रहे हैं।
एक गैर-एलिवेटेड वेब ब्राउज़र में एक उन्नत एप्लिकेशन से एक वेब पेज लॉन्च करने के लिए, माइक फेंग द्वारा बनाए गए कोड का उपयोग करें । मैंने URL को lpApplicationName में पास करने की कोशिश की लेकिन वह काम नहीं किया। इसके अलावा नहीं जब मैं CreateProcessWithTokenW का उपयोग lpApplicationName = "explorer.exe" (या iexplore.exe) और lpCommandLine = url के साथ करता हूं।
निम्न वर्कअराउंड काम करता है: एक छोटा EXE- प्रोजेक्ट बनाएं जिसमें एक कार्य हो: Process.Start (url), इसे चलाने के लिए CreateProcessWithTokenW का उपयोग करें ।EXE। मेरे विंडोज 8 आरसी पर यह ठीक काम करता है और Google क्रोम में वेब पेज खोलता है।
Explorer.exe
डी-एलीवेट का उपयोग करने का समर्थन नहीं किया गया है: "दुर्भाग्य से, विंडोज शेल टीम ने उत्तर दिया है कि" Explorer.exe AppName.exe "का वर्तमान व्यवहार बग है और भविष्य के अपडेट / विंडोज के संस्करणों में काम नहीं कर सकता है। इस पर भरोसा नहीं करना चाहिए। ”
यहाँ मेरा पूरा कोड है कि कैसे खोलें।
2 विकल्प हैं:
डिफ़ॉल्ट ब्राउज़र का उपयोग करके खुला (व्यवहार ब्राउज़र विंडो के अंदर खोला गया है)
डिफ़ॉल्ट कमांड विकल्पों के माध्यम से खोलें (व्यवहार ऐसा है जैसे आप "RUN.EXE" कमांड का उपयोग करते हैं)
'एक्सप्लोरर' के माध्यम से खोलें (व्यवहार ऐसा है जैसे आपने अपने फ़ोल्डर विंडो के अंदर url लिखा है url)
[वैकल्पिक सुझाव] 4. आवश्यक यूआरएल खोलने के लिए iexplore प्रक्रिया स्थान का उपयोग करें
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;
}
आशा है कि मैंने मदद की
GetWindowsPath
?
पुराने स्कूल का रास्ता;)
public static void openit(string x) {
System.Diagnostics.Process.Start("cmd", "/C start" + " " + x);
}
उपयोग: openit("www.google.com");
मेरे पास आज भी इसी तरह की समस्या होने के कारण इसका समाधान है।
माना जाता है कि आप http://google.com को व्यवस्थापक के साथ चलने वाले ऐप से खोलना चाहते हैं :
ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe", "http://www.google.com/");
Process.Start(startInfo);