मेरे आवेदन से वेब पेज कैसे खोलें?


126

मैं अपने WPF एप्लिकेशन को डिफ़ॉल्ट ब्राउज़र खोलना चाहता हूं और एक निश्चित वेब पेज पर जाना चाहता हूं। मैं उसको कैसे करू?

जवाबों:


266
System.Diagnostics.Process.Start("http://www.webpage.com");

कई तरीकों में से एक।


3
मैंने इसका उपयोग किया, लेकिन अब यह यूएसी के साथ काम नहीं करता है। मेरे आवेदन में मेरे पास यह प्रकट है <requestExecutionLevel स्तर = "आवश्यकताअनुसूचककर्ता" uiAccess = "गलत" /> जब मैं विंडोज 8 के तहत ऐप चलाता हूं (जहां आप अब यूएसी को अक्षम नहीं कर सकते हैं), तो मुझे वेब पेज खोलते समय निम्न अपवाद मिलते हैं : Win32Exception (0x80004005): System.Diagnostics.Process.StartWithShellExecuteEx
lvmeijer

यह प्रभाव तब नहीं होगा जब मैं आवश्यकता को बदल देता हूँ। लेकिन उसके बाद ऐप को ऊंचा नहीं किया गया :-(
lvmeijer

4
यह आपके एप्लिकेशन में एक बहुत बड़ा सुरक्षा छेद खोल सकता है यदि आप गलती से उपयोगकर्ता इनपुट से URL प्राप्त करते हैं और यह मान्य नहीं करते हैं कि यह एक यूआरआई है। वे तब आपके सिस्टम पर अपनी इच्छानुसार कोई भी एप्लिकेशन लॉन्च कर सकते हैं।
cdiggins

1
FYI करें: Os X और Windows पर यूनिटी, मोनो में काम करता है। यह iOS में काम नहीं करता है। मैंने दूसरों का परीक्षण नहीं किया।
ग्रांट एम

2
स्थानीय HTML फ़ाइल खोलने के बारे में कैसे?
गुगंज २१'१

34

मैं डिफ़ॉल्ट ब्राउज़र लॉन्च करने के लिए इस लाइन का उपयोग कर रहा हूं:

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

1
यह उत्तर एक डुप्लिकेट है।
अधिकतम

1
@MAXE दो उत्तर एक ही मिनट में बनाए गए थे।
4424देव

20

स्वीकृत उत्तर अब .NET कोर 3 पर काम नहीं करता है । इसे काम करने के लिए, निम्न विधि का उपयोग करें:

var psi = new ProcessStartInfo
{
    FileName = url,
    UseShellExecute = true
};
Process.Start (psi);

19

हालांकि एक अच्छा जवाब दिया गया है (उपयोग करते हुए 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;
}


6

आप एक उन्नत एप्लिकेशन से वेब पेज लॉन्च नहीं कर सकते। यह एक 0x800004005 अपवाद को बढ़ाएगा, शायद इसलिए क्योंकि explorer.exe और ब्राउज़र गैर-उन्नत चल रहे हैं।

एक गैर-एलिवेटेड वेब ब्राउज़र में एक उन्नत एप्लिकेशन से एक वेब पेज लॉन्च करने के लिए, माइक फेंग द्वारा बनाए गए कोड का उपयोग करें । मैंने URL को lpApplicationName में पास करने की कोशिश की लेकिन वह काम नहीं किया। इसके अलावा नहीं जब मैं CreateProcessWithTokenW का उपयोग lpApplicationName = "explorer.exe" (या iexplore.exe) और lpCommandLine = url के साथ करता हूं।

निम्न वर्कअराउंड काम करता है: एक छोटा EXE- प्रोजेक्ट बनाएं जिसमें एक कार्य हो: Process.Start (url), इसे चलाने के लिए CreateProcessWithTokenW का उपयोग करें ।EXE। मेरे विंडोज 8 आरसी पर यह ठीक काम करता है और Google क्रोम में वेब पेज खोलता है।


1
टिप्पणी देखें , Explorer.exeडी-एलीवेट का उपयोग करने का समर्थन नहीं किया गया है: "दुर्भाग्य से, विंडोज शेल टीम ने उत्तर दिया है कि" Explorer.exe AppName.exe "का वर्तमान व्यवहार बग है और भविष्य के अपडेट / विंडोज के संस्करणों में काम नहीं कर सकता है। इस पर भरोसा नहीं करना चाहिए। ”
कार्ल वॉल्श

4

यहाँ मेरा पूरा कोड है कि कैसे खोलें।

2 विकल्प हैं:

  1. डिफ़ॉल्ट ब्राउज़र का उपयोग करके खुला (व्यवहार ब्राउज़र विंडो के अंदर खोला गया है)

  2. डिफ़ॉल्ट कमांड विकल्पों के माध्यम से खोलें (व्यवहार ऐसा है जैसे आप "RUN.EXE" कमांड का उपयोग करते हैं)

  3. 'एक्सप्लोरर' के माध्यम से खोलें (व्यवहार ऐसा है जैसे आपने अपने फ़ोल्डर विंडो के अंदर 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;
    }

आशा है कि मैंने मदद की


3
जो मैं सोच रहा हूं वह यह है कि जब पहले से ही विभिन्न लोगों ने इस सवाल का जवाब देना आसान बना दिया तो इसे इतना जटिल क्यों बना दिया?
CularBytes

सिर्फ अपने बजाय SearchPath का उपयोग क्यों न करें GetWindowsPath?
ub3rst4r

3
क्यों खाली पकड़ें ब्लॉक? क्या सिर्फ अपवादों को निगलना बुरा नहीं है?
रेगेगिटेरियन

3

पुराने स्कूल का रास्ता;)

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

उपयोग: openit("www.google.com");


2

मेरे पास आज भी इसी तरह की समस्या होने के कारण इसका समाधान है।

माना जाता है कि आप http://google.com को व्यवस्थापक के साथ चलने वाले ऐप से खोलना चाहते हैं :

ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe", "http://www.google.com/");
Process.Start(startInfo); 

1
इस समाधान के लिए मुझे कौन से संदर्भ / नामस्थान का उपयोग करना चाहिए?
परिष्कृत

1
@Soph परिष्कृतUndoing मेरा मानना ​​है कि ProcessStartInfo और Process System.Diagnostics में स्थित हैं
फ्रांसिस लॉर्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.