সি # তে কীভাবে ডিফল্ট ব্রাউজারে খুলবেন


257

আমি একটি ছোট সি # অ্যাপ্লিকেশন ডিজাইন করছি এবং এতে একটি ওয়েব ব্রাউজার রয়েছে। আমি বর্তমানে আমার কম্পিউটারে আমার সমস্ত ডিফল্ট বলি গুগল ক্রোম আমার ডিফল্ট ব্রাউজার, তবুও যখন আমি আমার উইন্ডোটিতে একটি নতুন উইন্ডোতে খোলার জন্য একটি লিঙ্ক ক্লিক করি তখন এটি ইন্টারনেট এক্সপ্লোরার খোলে। পরিবর্তে ডিফল্ট ব্রাউজারে এই লিঙ্কগুলি খোলা করার কোনও উপায় আছে? বা আমার কম্পিউটারে কিছু ভুল আছে?

আমার সমস্যাটি হ'ল অ্যাপ্লিকেশনটিতে আমার একটি ওয়েব ব্রাউজার রয়েছে, সুতরাং আপনি গুগলে যান এবং "স্ট্যাক ওভারফ্লো" টাইপ করুন এবং প্রথম লিঙ্কটিতে ডান ক্লিক করুন এবং "নতুন উইন্ডোতে খুলুন" ক্লিক করুন এটি ক্রোমের পরিবর্তে আইইতে খোলে। এটি কি আমি ভুলভাবে কোডিং করেছি বা আমার কম্পিউটারে এমন কোনও সেটিংস সঠিক নয়

=== সম্পাদনা ===

এটা সত্যিই বিরক্তিকর। আমি ইতিমধ্যে সচেতন যে ব্রাউজারটি IE, তবে আমার এটি আগে ভাল কাজ করেছিল। আমি যখন একটি লিঙ্ক ক্লিক করি এটি ক্রোমে খোলা। আমি তত্ক্ষণাত অ্যাপ্লিকেশনটি তৈরি করতে তীব্র বিকাশ ব্যবহার করছি কারণ আমি আরম্ভ করতে সি # এক্সপ্রেস পেতে পারি না। আমি একটি নতুন উইন্ডো ইনস্টল করেছি এবং যেহেতু আমি আমার অ্যাপ্লিকেশনটিতে খুব বেশি দূরে ছিল না, তাই আমি আরম্ভ করার সিদ্ধান্ত নিয়েছি এবং এখন আমার এই সমস্যাটি হচ্ছে। সে কারণেই আমি নিশ্চিত নই যে এটি আমার কম্পিউটার কিনা। ডিফল্ট ব্রাউজারে কেবল নতুন লিঙ্কটি না খোলার পরিবর্তে কোনও লিঙ্ক ক্লিক করলে আইই পুরো ব্রাউজারটি কেন শুরু করবে?


হেই, আপনার জন্য ক্রোম খোলার জন্য আইআইকে বোঝা কিছুটা উত্সাহ যুদ্ধ হবে। ঠিক আছে, কিছু না। আপনি সরাসরি আইই চালনা করলে এটি কাজ করে না। বা আইই ডিফল্ট হলে সেই বিষয়ে ক্রোম।
হ্যানস প্যাস্যান্ট

@ এসলাক্স মনো? আপনি কি বিষয়ে কথা হয়?
শান

1) gettartMenuDir ফায়ারফক্স বা ক্রোম স্ট্যান্ডার্ডনাম বেসের জন্য অনুসন্ধান করুন। যদি না পাওয়া যায়। 2) 32 64 ক্রোম এফএফ ব্যবহার করে যে স্ট্যান্ডার্ড ইনস্টল অবস্থানগুলির তালিকা পান। যদি না 3) শেষ অবলম্বন উত্তরগুলি ব্যবহার করুন।
bh_earth0

উত্তর:


505

আপনি শুধু লিখতে পারেন

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

সম্পাদনা : WebBrowserনিয়ন্ত্রণটি আইই এর একটি এম্বেড করা অনুলিপি।
সুতরাং, এর অভ্যন্তরের যে কোনও লিঙ্ক আইইতে খুলবে।

এই আচরণটি পরিবর্তন করতে, আপনি Navigatingইভেন্টটি পরিচালনা করতে পারেন ।


1
চেষ্টা করে দেখুন Taskmgr.exe ব্যবহার করুন, আপনি iexporer.exe এর দুটি অনুলিপি দেখতে পাবেন । প্রক্রিয়াজাতকরণের জন্য নেভিগেটিং চালিত হয় না।
হ্যানস প্যাস্যান্ট

4
@ শীন: হ্যাঁ Process.Start(e.Url.ToString())
স্ল্যাक्स

2
স্থানীয় ইউআরএল (ফাইল: ///) কোয়েরিস্ট্রিংয়ের সাথে কাজ করে না যতক্ষণ না ব্রাউজারের এক্সকে প্রথম প্যারাম হিসাবে নির্দিষ্ট করা হয়।
HerrimanCoder

2
সচেতন হন যে এই পদ্ধতিটি কোনও সুরক্ষা সমস্যাও প্রবর্তন করতে পারে, যেহেতু, "ইউআরএল" কোনও প্রয়োগের শারীরিক পথের পরিবর্তে এটি কার্যকর করা হবে
জেরি প্রিটোরিয়াস

1
@ স্পেন্সার: নিশ্চিত হয়ে নিন যে URL টি বিশ্বাসযোগ্য trusted
স্ল্যাक्स

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

ধন্যবাদ! আমার জন্য কাজ করে ... কিন্তু সঙ্গে MacOS মধ্যে openপরিবর্তে কমান্ডxdg-open
equiman

@ একুইম্যান এটা করে না? RuntimeInformation.IsOSPlatform(OSPlatform.OSX)নাকি লিনাক্সে এটি ইতিমধ্যে সত্য হবে?
জোয়েল হার্কস 26'17

আমি এটা করেছি। কিন্তু xdg-command"xdg- উন্মুক্ত: কমান্ড পাওয়া যায় নি" প্রদান করে। তারপর আমি openকমান্ড এবং কাজ দিয়ে পরীক্ষা করেছি ।
সমমানের

@ একুইম্যান তাই আপনি বলছেন যে আমি এটির কাজ করতে লিনাক্স এবং ওএসএক্সের চারপাশে স্যুইচ করা উচিত বা ম্যাকোস উডনার ওএসএক্সে পড়ে না?
জোয়েল হার্কস

1
আমি মনে করি না ... আমার সমাধানটি সদয় বিকল্প।
সমতুল্য

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

এটি আপনার সমস্যার সমাধান করা উচিত


7
'স্ট্যাটিক অকার্যকর গোটোসাইট' হওয়া উচিত
বেহরোজ

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সত্য থেকে ডিফল্ট।
স্ল্যাक्स

4
@ এসএলক্স, ধন্যবাদ অন্যদিকে এটি উল্লেখ করা গুরুত্বপূর্ণ যে এটি হওয়া উচিত true
আন্দ্রেয়াস

1
যাঁরা খুব অলস তা পরীক্ষা করতে পারেন ... প্রক্রিয়াটির জন্য "সিস্টেম. ডায়াগনস্টিক্স ব্যবহার করা দরকার"
নিক রবার্টস

এটি ডাব্লুপিএফ দ্বারা প্রয়োজনীয় রুট বলে মনে হচ্ছে। আপনি যদি কেবল Process.Start(url)এটি করেন তবে এটি কোনও নতুন ব্রাউজার উইন্ডো খুলবে না।
রুবিহাউস

5

কটাক্ষপাত GeckoFX নিয়ন্ত্রণ

গেকোএফএক্স একটি ওপেন-সোর্স উপাদান যা মজিলা গেকো (ফায়ারফক্স) কে কোনও নেট। উইন্ডোজ ফর্ম অ্যাপ্লিকেশনে এম্বেড করা সহজ করে তোলে। পরিষ্কার পরিচ্ছন্ন, সম্পূর্ণ মন্তব্যে সি # রচিত, গেকোএফএক্স হ'ল ডিফল্ট ইন্টারনেট এক্সপ্লোরার-ভিত্তিক ওয়েব ব্রাউজার নিয়ন্ত্রণের জন্য উপযুক্ত প্রতিস্থাপন।


আমার সমস্যাটি হ'ল অ্যাপ্লিকেশনটিতে আমার একটি ওয়েব ব্রাউজার রয়েছে, তাই আপনি গুগলে যান এবং "স্ট্যাক ওভারফ্লো" টাইপ করুন এবং প্রথম লিঙ্কটিতে ডান ক্লিক করুন এবং "নতুন উইন্ডোতে খুলুন" ক্লিক করুন এটি ক্রোমের পরিবর্তে আইইতে খোলে। এটিই কি আমি ভুলভাবে কোডিং করেছি বা আমার কম্পিউটারে কোনও সেটিংস সঠিক নয়
শান

@ এসলাক্স: আপনি কেন তা বলছেন? আমি বিশ্বাস করি না যে স্ট্রিং তৈরি করা এবং এটি getDefaultBrowserPath () এর সমান সেট করা মোটেই কঠিন।
দ্য ডাক্তার

@ শিয়ান: আপনার অ্যাপ্লিকেশনটির মধ্যে যদি কোনও ওয়েব ব্রাউজার থাকে তবে এটি ডিফল্টরূপে আইই ব্যবহার করতে চলেছে। নেভিগেট ইভেন্ট আপনাকে এর আশপাশে যেতে সহায়তা করতে পারে।
দ্য ডাক্তার

ওপি পৃথক প্রক্রিয়া দ্বারা চালু করা ডিফল্ট ব্রাউজার পরিবর্তন করতে চায় না তা বুঝতে পেরে আমি আমার উত্তরটি পরিবর্তন করেছি।
ডক্টর

5

পুরানো স্কুল উপায়ে এটি চেষ্টা করে দেখুন;)

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

ব্যবহার: ওপেনিট ("www.google.com");


2
এটাকে কী শোষণ করা যায় না, আলা, "শেলসক"?
জোসেফ লেনাক্স

@ জোসেফ লেনাক্স এটি একটি দুর্দান্ত পয়েন্ট! এটি সম্ভবত উল্লেখ করার মতো যে System.Diagnostics.Process.Start সরাসরি ইউআরএল এ খুব বেশি (কোনও?) নিরাপদ নয়! অন্যদিকে, ব্যবহারকারী যদি তাদের অ্যাপ্লিকেশনটি তাদের কম্পিউটারে চালাচ্ছেন (তারা সম্ভবত) তবে তারা নিজেরাই সবচেয়ে খারাপ কাজ করতে পারে তাদের নিজস্ব সিস্টেমটি ভেঙে ফেলতে: পি
বেন

4
@ বেন নির্ভর করে যেখানে ইনপুটটি আসছে। যদি এটি একটি ভাগ করা ডেটা উত্স হয় তবে একবার ব্যবহারকারী কোনও দূষিত কমান্ড প্রবেশ করতে পারত এবং "গো" ক্লিক করে এমন সমস্ত ব্যবহারকারী সেই ব্যবহারকারীর করুণায় থাকবে।
ড্যান বেচার্ড

4

অনেকগুলি গবেষণা করার পরে আমি অনুভব করি প্রদত্ত উত্তরগুলির বেশিরভাগই ডটনেট কোর দিয়ে কাজ করবে না। 1।System.Diagnostics.Process.Start("http://google.com") .; - ডটনেট কোর নিয়ে কাজ করবে না

২. এটি কাজ করবে তবে ডিফল্ট ব্রাউজারটি ক্রোম হলে এটি নতুন উইন্ডোটি খোলার ব্লক করবে

 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());

আপনি কি এমন প্যাকেজ ব্যবহার করছেন যা ইভেন্টআরগসকে লিংক টেক্সটের সম্পত্তি দেয়?
নিক রবার্টস

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
কিউ এর উত্তর নয়, এটি ডিফল্ট ব্রাউজারটি কী কোড তা জানা যায়নি
আরজান

0

ইউডাব্লুপিতে:

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

এই Launcher.LaunchUriAsync । সম্পূর্ণ উদাহরণের জন্য লিঙ্ক অনুসরণ করুন। মজার বিষয় হল, রিটার্ন মানটি কলারটি ইউআরএল খোলা হয়েছিল কিনা তা জানতে দেয়। সাবধান, এটি উইন্ডোজ 8 / সার্ভার2012 / ফোন 8 এবং উপরের জন্য। যদি সফ্টওয়্যারটি পুরানো সংস্করণগুলির সাথে সামঞ্জস্য করতে হয় তবে এটি এটি ব্যবহার করতে পারে না।
স্টাফেন গরিখন


0

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