কীভাবে আমার অ্যাপ্লিকেশন থেকে একটি ওয়েব পৃষ্ঠা খুলবেন?


126

আমি আমার ডাব্লুপিএফ অ্যাপ্লিকেশনটিকে ডিফল্ট ব্রাউজারটি খুলতে এবং একটি নির্দিষ্ট ওয়েব পৃষ্ঠায় যেতে চাই। আমি কেমন করে ঐটি করি?

উত্তর:


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

অনেক উপায়ে একটি।


3
আমি এটিও ব্যবহার করেছি তবে এখন দেখা যাচ্ছে এটি ইউএসি এর সাথে কাজ করে না। আমার অ্যাপ্লিকেশনটিতে আমি ম্যানিফেস্টে <অনুরোধযুক্তএক্সিকিউশনলিভেল লেভেল = "প্রয়োজনীয় অ্যাডমিনিস্ট্রেটর" ইউআইএ্যাক্সেস = "মিথ্যা" /> আমি যখন উইন্ডোজ 8 এর অধীনে অ্যাপটি চালনা করি (যেখানে আপনি আর ইউএসি অক্ষম করতে পারবেন না), ওয়েব পৃষ্ঠাগুলি খোলার সময় আমি নিম্নলিখিত ব্যতিক্রমগুলি পাই : Win32Exception (0x80004005):
System.Diagnostics.Process.StartWithShellExecuteEx

আমি যখন অ্যাডমিনিস্ট্রেটর হিসাবে ইনভোকার হিসাবে পরিবর্তন করব তখন এই প্রভাবটি ঘটবে না। তবে অ্যাপ্লিকেশনটি উন্নত নয় :-(
lvmeijer

4
আপনি যদি ভুলবশত ইউজার ইনপুট থেকে ইউআরএল পেয়ে থাকেন এবং এটি কোনও ইউআরআই কিনা তা যাচাই না করে তবে এটি আপনার অ্যাপ্লিকেশনটির একটি দুর্দান্ত সুরক্ষার গর্ত খুলে দিতে পারে। তারপরে তারা আপনার সিস্টেমে তারা চাইলে যে কোনও অ্যাপ্লিকেশন চালু করতে পারে।
সিডিগিংস

1
এফওয়াইআই: ওএস এক্স এবং উইন্ডোজ-এ ইউনিট, মনোতে ওয়ার্কস। এটি আইওএসে কাজ করে না। আমি অন্যদের পরীক্ষা করিনি।
অনুদান এম

2
স্থানীয় এইচটিএমএল ফাইলটি কীভাবে খুলবেন?
guogangj

34

আমি ডিফল্ট ব্রাউজারটি চালু করতে এই লাইনটি ব্যবহার করেছি:

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

1
এই উত্তরটি একটি সদৃশ।
ম্যাক্স

1
@ ম্যাক্স এই দুটি উত্তর একই মিনিটে তৈরি করা হয়েছিল।
4424dev

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;
}

10

মাইক্রোসফ্ট কেবি 305703 নিবন্ধে ভিজ্যুয়াল সি # ব্যবহার করে প্রোগ্রামটিমে ডিফল্ট ইন্টারনেট ব্রাউজারটি কীভাবে শুরু করবেন সে সম্পর্কে এটি ব্যাখ্যা করে ।

ট্রাবলশুটিং বিভাগটি চেক করতে ভুলবেন না।


6

আপনি একটি উন্নত অ্যাপ্লিকেশন থেকে কোনও ওয়েব পৃষ্ঠা আরম্ভ করতে পারবেন না। এটি 0x800004005 ব্যতিক্রম উত্থাপন করবে, সম্ভবত এক্সপ্লোরার এক্সেক্স এবং ব্রাউজারটি অ-উন্নতমানের চলছে।

একটি অ-উন্নত ওয়েব ব্রাউজারে একটি উন্নত অ্যাপ্লিকেশন থেকে একটি ওয়েব পৃষ্ঠা চালু করতে মাইক ফেং দ্বারা তৈরি কোডটি ব্যবহার করুন । আমি lpApplicationName এ ইউআরএল পাস করার চেষ্টা করেছি কিন্তু এটি কার্যকর হয়নি। এছাড়াও আমি যখন lpApplicationName = "এক্সপ্লোরার এক্সেক্স" (বা iexplore.exe) এবং lpCommandLine = url সহ ক্রিয়েটপ্রসেসউইট টোকেনডাব্লু ব্যবহার করি না।

নিম্নলিখিত workaround কাজ করে: একটি ছোট EXE- প্রকল্প তৈরি করুন যার একটি কাজ রয়েছে: প্রক্রিয়া.স্টার্ট (url), এটি .EXE চালানোর জন্য ক্রিয়েটপ্রসেসবিথটোকেনডাব্লু ব্যবহার করুন। আমার উইন্ডোজ 8 আরসি তে এটি সূক্ষ্মভাবে কাজ করে এবং গুগল ক্রোমে ওয়েব পৃষ্ঠাটি খোলে।


1
মন্তব্য দেখুন , Explorer.exeডি-এলিভেট করতে ব্যবহার করা সমর্থনযোগ্য নয়: "দুর্ভাগ্যক্রমে, উইন্ডোজ শেল টিম জবাব দিয়েছে যে" এক্সপ্লোরারআরেক্সি অ্যাপনাম.এক্সই "এর বর্তমান আচরণ একটি বাগ এবং এটি ভবিষ্যতে উইন্ডোজের আপডেট / সংস্করণগুলিতে কাজ করে না Applications এটির উপর নির্ভর করা উচিত নয়। "
কার্ল ওয়ালশ

4

কীভাবে খুলতে হয় তার আমার সম্পূর্ণ কোড এখানে।

এখানে 2 টি বিকল্প রয়েছে:

  1. ডিফল্ট ব্রাউজার ব্যবহার করে খুলুন (ব্রাউজার উইন্ডোর অভ্যন্তরে ব্যবহারের মতো আচরণ)

  2. ডিফল্ট কমান্ড বিকল্পগুলির মাধ্যমে খুলুন (আচরণটি আপনি "RUN.EXE" কমান্ড ব্যবহার করার মতো)

  3. 'এক্সপ্লোরার' এর মাধ্যমে খুলুন (আচরণটি আপনার ফোল্ডার উইন্ডোটির url এর ভিতরে url লিখে দেওয়ার মতো)

[alচ্ছিক পরামর্শ] ৪. প্রয়োজনীয় ইউআরএল খোলার জন্য আইসপ্লোর প্রক্রিয়া অবস্থান ব্যবহার করুন

কোড:

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
আমি যা ভাবছি তা হ'ল ... যখন বিভিন্ন ব্যক্তি ইতিমধ্যে প্রশ্নটির উত্তর দেওয়ার জন্য মৃতকে সহজ করে দিয়েছিল তখন কেন এত জটিল করা হচ্ছে?
কুলারবাইটস

কেন শুধু নিজের পরিবর্তে অনুসন্ধানপথ ব্যবহার করবেন না 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
@ সূক্ষ্মসূত্রহীনতা আমি বিশ্বাস করি যে প্রসেসস্টার্টআইএনফো এবং প্রক্রিয়াটি সিস্টেমের মধ্যে রয়েছে ia ডায়াগনস্টিক্স
ফ্রান্সিস লর্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.