C # में डिफ़ॉल्ट ब्राउज़र कैसे खोलें


257

मैं एक छोटा सी # एप्लिकेशन डिज़ाइन कर रहा हूं और इसमें एक वेब ब्राउज़र है। वर्तमान में मेरे कंप्यूटर पर मेरे सभी डिफॉल्ट हैं, Google क्रोम मेरा डिफ़ॉल्ट ब्राउज़र है, फिर भी जब मैं एक नई विंडो में खोलने के लिए अपने एप्लिकेशन में एक लिंक पर क्लिक करता हूं, तो यह इंटरनेट एक्सप्लोरर को खोलता है। क्या इसके बजाय डिफ़ॉल्ट ब्राउज़र में इन लिंक को खोलने का कोई तरीका है? या मेरे कंप्यूटर पर कुछ गड़बड़ है?

मेरी समस्या यह है कि मेरे पास एप्लिकेशन में एक वेबब्रोसर है, इसलिए कहते हैं कि आप Google पर जाएं और "स्टैक ओवरफ्लो" टाइप करें और राइट लिंक पर क्लिक करें और क्रोम के बजाय IE में "ओपन इन न्यू विंडो" पर क्लिक करें। क्या यह कुछ ऐसा है जिसे मैंने अनुचित तरीके से कोडित किया है, या क्या मेरे कंप्यूटर पर कोई सेटिंग ठीक नहीं है

=== संपादित ===

यह वास्तव में कष्टप्रद है। मुझे पहले से पता है कि ब्राउज़र IE है, लेकिन मुझे पहले ठीक काम करना था। जब मैंने एक लिंक पर क्लिक किया तो यह क्रोम में खुल गया। मैं उस समय एप्लिकेशन बनाने के लिए तेज विकास का उपयोग कर रहा था क्योंकि मुझे स्टार्ट अप करने के लिए सी # एक्सप्रेस नहीं मिल सकता था। मैंने एक नई विंडो स्थापित की और चूंकि मैं अपने एप्लिकेशन में बहुत दूर नहीं था, इसलिए मैंने शुरू करने का फैसला किया, और अब मुझे यह समस्या हो रही है। इसलिए मुझे यकीन नहीं है कि यह मेरा कंप्यूटर है या नहीं। जब डिफ़ॉल्ट ब्राउज़र में नया लिंक खोलने के बजाय एक लिंक पर क्लिक किया जाता है तो IE पूरे ब्राउज़र की शुरुआत क्यों करेगा?


हे, आपके लिए क्रोम खोलने के लिए IE को समझाने के लिए एक कठिन लड़ाई का एक सा होने जा रहा है। खैर, थोड़ा नहीं। यदि आप IE को सीधे चलाते हैं तो यह काम नहीं करता है। या उस मामले के लिए क्रोम यदि IE डिफ़ॉल्ट है।
हंस पैसेंट

@ एसएलएस मोनो? तुम्हारी किस बारे में बोलने की इच्छा थी?
सीन

1) getstartMenuDir फ़ायरफ़ॉक्स या क्रोम स्टैंडआर्टन बेस के लिए खोजें। अगर नहीं मिला। 2) मानक स्थापित स्थानों की सूची प्राप्त करें जो कभी 32 64 क्रोम एफएफ का उपयोग करते हैं। यदि नहीं 3) अंतिम उपाय उत्तर का उपयोग करें।
bh_earth0

जवाबों:


505

आप बस लिख सकते हैं

System.Diagnostics.Process.Start("http://google.com");

संपादित करें : WebBrowserनियंत्रण IE की एक अंतर्निहित प्रति है।
इसलिए, इसके अंदर कोई भी लिंक IE में खुल जाएगा।

इस व्यवहार को बदलने के लिए, आप Navigatingईवेंट को संभाल सकते हैं ।


1
कोशिश करो। Taskmgr.exe का उपयोग करें, आपको iexporer.exe की दो प्रतियां दिखाई देंगी। नेविगेट करना आउट-ऑफ-द-प्रोसेस के लिए फायर नहीं करता है।
हंस पैसेंट

4
@ सीन: हां। Process.Start(e.Url.ToString())
SLAKs

2
स्थानीय url (फ़ाइल: ///) एक querystring के साथ काम नहीं करता है जब तक कि ब्राउज़र exe को पहले परम के रूप में निर्दिष्ट नहीं किया जाता है।
हेरिमनकोडर

2
विदित हो कि यह विधि एक सुरक्षा मुद्दे को भी पेश कर सकती है, क्योंकि, यदि "url" को एक भौतिक पथ के साथ एक अनुप्रयोग में बदल दिया जाता है तो यह भी निष्पादित होगा
Gerrie Pretorius

1
@Spencer: सुनिश्चित करें कि URL विश्वसनीय है।
स्लाक्स

45

डॉटनेट कोर में यह सवाल खोजने वालों के लिए। मुझे यहां एक समाधान मिला

कोड:

private void OpenUrl(string url)
{
    try
    {
        Process.Start(url);
    }
    catch
    {
        // hack because of this: https://github.com/dotnet/corefx/issues/10361
        if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
        {
            url = url.Replace("&", "^&");
            Process.Start(new ProcessStartInfo("cmd", $"/c start {url}") { CreateNoWindow = true });
        }
        else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
        {
            Process.Start("xdg-open", url);
        }
        else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
        {
            Process.Start("open", url);
        }
        else
        {
            throw;
        }
    }
}

धन्यवाद! मेरे लिए काम करता है ... लेकिन openxdg-open
1717 के

@ Equiman यह ऐसा नहीं करता है? RuntimeInformation.IsOSPlatform(OSPlatform.OSX)या क्या यह लिनक्स पर पहले से ही सच होगा?
जोएल हर्केस

मैंने यह किया। लेकिन xdg-commandरिटर्न "xdg-open: कमांड नहीं मिला"। फिर मैंने openकमांड और कार्यों के साथ परीक्षण किया ।
बराबर

@ ईक्विमन तो आप कह रहे हैं कि मुझे इसे काम करने के लिए थेरेंज लाइनक्स और ओएसएक्स पर स्विच करना चाहिए या मैकोस यूडनर ओएसएक्स को नहीं गिराता है?
जोएल हरकस

1
मुझे नहीं लगता ... मेरा समाधान एक विकल्प है।
बराबर

38
public static void GoToSite(string url)
{
     System.Diagnostics.Process.Start(url);
}

इससे आपकी समस्या हल हो जानी चाहिए


7
'static void GotoSite' होना चाहिए
behrooz

15

क्या आपने Processयहाँ बताए अनुसार कोशिश की : http://msdn.microsoft.com/de-de/library/system.diagnostics.process.aspx ?

आप उपयोग कर सकते हैं

Process myProcess = new Process();

try
{
    // true is the default, but it is important not to set it to false
    myProcess.StartInfo.UseShellExecute = true; 
    myProcess.StartInfo.FileName = "http://some.domain.tld/bla";
    myProcess.Start();
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

1
UseShellExecuteसत्य के लिए चूक।
SLKs

4
@SLaks, धन्यवाद। दूसरी ओर यह उल्लेख करना महत्वपूर्ण है कि यह होना चाहिए true
एंड्रियास

1
जांच के लिए बहुत आलसी लोगों के लिए ... प्रक्रिया को "System.Diagnostics का उपयोग करना" आवश्यक है
निक रॉबर्ट्स

यह WPF द्वारा आवश्यक मार्ग प्रतीत होता है। यदि आप बस करते हैं Process.Start(url), तो यह एक नई ब्राउज़र विंडो नहीं खोलता है।
रूबहॉस

5

जेकॉफ़एक्स नियंत्रण पर एक नज़र डालें ।

GeckoFX एक ओपन-सोर्स घटक है जो मोज़िला गेको (फ़ायरफ़ॉक्स) को किसी भी .NET विंडोज फॉर्म एप्लीकेशन में एम्बेड करना आसान बनाता है। साफ-सुथरी, पूरी तरह से C # लिखी गई, GeckoFX डिफ़ॉल्ट इंटरनेट एक्सप्लोरर-आधारित WebBrowser नियंत्रण के लिए सही प्रतिस्थापन है।


मेरी समस्या यह है कि मेरे पास एप्लिकेशन में एक वेबब्रोसर है, इसलिए कहते हैं कि आप Google पर जाएं और "स्टैक ओवरफ्लो" टाइप करें और राइट लिंक पर क्लिक करें और क्रोम के बजाय IE में "ओपन इन न्यू विंडो" पर क्लिक करें। क्या यह कुछ ऐसा है जिसे मैंने अनुचित तरीके से कोडित किया है, या क्या मेरे कंप्यूटर पर कोई सेटिंग सही नहीं है
सीन

@ एसएलएसीएस: आप ऐसा क्यों कहते हैं? मुझे विश्वास नहीं है कि एक स्ट्रिंग लिखना और इसे GetDefaultBrowserPath () के बराबर सेट करना बिल्कुल मुश्किल है।
DOCTOR

@ सीन: यदि आपके पास आपके आवेदन के भीतर एक वेबब्रोसर है तो यह डिफ़ॉल्ट रूप से IE का उपयोग करने वाला है। नेविगेट करने की घटना आपको उस आस-पास लाने में मदद कर सकती है।
DOCTOR

मैंने अपने उत्तर को यह समझने के बाद संशोधित किया है कि ओपी एक अलग प्रक्रिया द्वारा शुरू किए गए डिफ़ॉल्ट ब्राउज़र को बदलना नहीं चाहता है।
DOCTOR

5

इसे आज़माएं, पुराने स्कूल का तरीका;)

public static void openit(string x)
    {
        System.Diagnostics.Process.Start("cmd", "/C start" + " " + x);
    }

उपयोग: ओपेनिट ("www.google.com");


2
क्या यह शोषित नहीं किया जा सकता, अला, "शेलसॉक"?
जोसेफ लेनोक्स

@ जोसेफ लेनोक्स एक उत्कृष्ट बिंदु है! यह संभवतः ध्यान देने योग्य है कि URL पर System.Diagnostics.Process.Start सीधे बहुत (कोई भी?) सुरक्षित नहीं है! दूसरी ओर, यदि उपयोगकर्ता THEIR कंप्यूटर पर आपके एप्लिकेशन को चला रहा है (वे शायद हैं), तो सबसे खराब वे अपने स्वयं के सिस्टम को तोड़ सकते हैं: P
बेन

4
@ बीन डिपेंड करता है कि इनपुट कहां से आ रहा है। यदि यह एक साझा डेटा स्रोत है, तो एक बार उपयोगकर्ता दुर्भावनापूर्ण आदेश दर्ज कर सकता है और "गो" पर क्लिक करने वाले अन्य सभी उपयोगकर्ता उस उपयोगकर्ता की दया पर होंगे।
दान बेखर

4

बहुत शोध के बाद मुझे लगता है कि दिए गए उत्तर में से अधिकांश डॉटनेट कोर के साथ काम नहीं करेंगे। 1।System.Diagnostics.Process.Start("http://google.com") .; - डॉटनेट कोर के साथ काम नहीं करेगा

2. यह काम करेगा, लेकिन यह नई विंडो को ब्लॉक करेगा यदि डिफ़ॉल्ट ब्राउज़र क्रोम है

 myProcess.StartInfo.UseShellExecute = true; 
    myProcess.StartInfo.FileName = "http://some.domain.tld/bla";
    myProcess.Start();

नीचे सबसे सरल है और सभी परिदृश्यों में काम करेगा।

Process.Start("explorer", url);

इससे मेरे लिए हल हो गया।
Rufw91

3

इसने मेरे लिए डिफ़ॉल्ट खोला:

System.Diagnostics.Process.Start(e.LinkText.ToString());

क्या कोई पैकेज है जो आप उपयोग कर रहे हैं जो EventArgs को LinkText की संपत्ति देता है?
निक रॉबर्ट्स

3

dotnet coreयदि हम उपयोग करते हैं तो एक त्रुटि फेंकता है Process.Start(URL)। निम्नलिखित कोड में काम करेगा dotnet core। आप इसके बजाय किसी भी ब्राउज़र को जोड़ सकते हैं Chrome

var processes = Process.GetProcessesByName("Chrome");
var path  = processes.FirstOrDefault()?.MainModule?.FileName;
Process.Start(path,  url);

3
Q का उत्तर नहीं है, यह कोड को ज्ञात नहीं है कि डिफ़ॉल्ट ब्राउज़र क्या है
Arjan

0

UWP में:

await Launcher.LaunchUriAsync(new Uri("http://google.com"));

यह Launcher.LaunchUriAsync है । पूर्ण उदाहरण के लिए लिंक का अनुसरण करें। दिलचस्प है, रिटर्न मान कॉलर को यह जानने की अनुमति देता है कि URL खोला गया था या नहीं। खबरदार, यह विंडोज 8 / Server2012 / Phone8 और इसके बाद के संस्करण के लिए है। यदि सॉफ़्टवेयर को पुराने संस्करणों के साथ संगत होना है, तो वह इसका उपयोग नहीं कर सकता है।
स्टीफन गौरिचोन


0

खोजकर्ता
@ "सॉफ़्टवेयर \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION" के वर्तमान संस्करण के साथ रजिस्ट्री को अपडेट करें

public enum BrowserEmulationVersion
{
    Default = 0,
    Version7 = 7000,
    Version8 = 8000,
    Version8Standards = 8888,
    Version9 = 9000,
    Version9Standards = 9999,
    Version10 = 10000,
    Version10Standards = 10001,
    Version11 = 11000,
    Version11Edge = 11001
}

key.SetValue(programName, (int)browserEmulationVersion, RegistryValueKind.DWord);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.