2012-04-20 13 views
6

मेरे पास एक एमएसआई इंस्टॉलर का उपयोग कर एक विंडोज फॉर्म एप्लिकेशन (सी #, नेट 3.5) स्थापित है। इस एप्लिकेशन में मेरे पास एक बटन है जो दबाए जाने पर एक ब्राउज़र को एक विशिष्ट यूआरएल के साथ खोलता है। मैंसी # विंडोज़ फॉर्म इंस्टॉलेशन के बाद डिफ़ॉल्ट ब्राउज़र नहीं खोलता

Process.Start(url); 

का उपयोग ब्राउज़र को खोलने के लिए। यह डिबगिंग करते समय ठीक काम करता है, लेकिन स्थापना के बाद यह इष्टतम परिणामों से कम है। उदाहरण के लिए।

  • यदि मैं इसे जस्ट मी विकल्पों के साथ स्थापित करता हूं तो मैं वर्तमान सेटिंग्स के साथ अपना डिफ़ॉल्ट ब्राउज़र (एफएफ) खोलता हूं।
  • अगर मैं हर कोई विकल्प के साथ इसे स्थापित है, जब मैं बटन प्रेस यह जहाँ तक मेरा कर सकते हैं एक

के साथ बाहर मेरी हाल ही में किसी भी सेटिंग को (प्रॉक्सी, टूलबार आदि प्रदर्शित) IE के संस्करण खुलेगा यह समस्या बताते समय एप्लिकेशन के साथ जुड़े उपयोगकर्ता द्वारा उत्पन्न किया गया है।

इस बात को ध्यान में रखते हुए कि उपयोगकर्ताओं को प्रॉक्सी और व्यक्तिगत ब्राउज़र सेटिंग्स की आवश्यकता हो सकती है और बस मुझे, हर किसी को उपयोगकर्ता के लिए रहना चाहिए। ओक्शन का सबसे अच्छा कोर्स क्या है?

मैं

ProcessStartInfo.UserName = Environment.UserName 

का उपयोग कर मौजूदा उपयोगकर्ता के प्रवेश के साथ Process.Start (यूआरएल) को कॉल करने की कोशिश की लेकिन यह भी एक पासवर्ड की आवश्यकता है और साख के लिए पूछ एक विकल्प नहीं है।

क्या आपके पास कोई अन्य सुझाव है, क्या मैं प्रक्रिया का उपयोग कर रहा हूं। स्टार्ट() गलत तरीके से, क्या सेटिंग के दौरान मुझे सेटिंग्स की आवश्यकता है, क्या मुझे कुछ याद आया है?

अद्यतन: data_smith के रूप में प्रोसेस एक्सप्लोरर का उपयोग करते हुए सुझाव दिया मैं निम्नलिखित देखा:

  • अगर मैं सभी के लिए आवेदन स्थापित यह NT प्राधिकारी \ SYSTEM उपयोगकर्ता इसलिए बिना कॉन्फ़गर ब्राउज़र के तहत शुरू कर देंगे।
  • अगर मैं स्थापित बस मेरे साथ आवेदन यह के तहत शुरू होता है वर्तमान उपयोगकर्ता

वहाँ एक रास्ता है, वर्तमान उपयोगकर्ता के तहत क्रेडेंशियल के लिए पूछ रहे हैं, (विंडोज़ बूट पर) आवेदन शुरू करने के लिए बिना चयनित भी हालांकि यह हर किसी के लिए स्थापित है?

अद्यतन: data_smith द्वारा एक सुझाव ShellExecute और सुझावों here और here मैं इस समस्या को हल करने और वांछित व्यवहार प्राप्त करने में सक्षम था का उपयोग करने के बाद।

मुख्य मुद्दा यह था कि जब इंस्टॉलर समाप्त हो गया तो प्रक्रिया Process.Start() के साथ शुरू हुई थी; इसने एनटी प्राधिकरण \ सिस्टम उपयोगकर्ता (उपयोगकर्ता इंस्टॉलर के तहत चलने वाले) के रूप में एप्लिकेशन शुरू किया, इसलिए इस एप्लिकेशन द्वारा खोले गए सभी ब्राउज़र सिस्टम उपयोगकर्ता के अधीन भी होंगे। Data_smith से सुझाव का उपयोग करके और ऊपर दिए गए सुझाव मैं वर्तमान उपयोगकर्ता के तहत प्रक्रिया शुरू करने में सक्षम था।

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

+0

क्या आप अपना एप्लिकेशन इंस्टॉलर से चलाते हैं? – ogggre

+0

एप्लिकेशन इंस्टॉल होने के बाद यह तुरंत शुरू हो जाता है और यह हमेशा मशीन स्टार्टअप पर शुरू होता है। यह सिस्टम ट्रे में बैठता है। – Constantin

+2

मुझे लगता है कि @ogggre क्या पूछा गया था, क्या आपका एप्लिकेशन इंस्टॉलर द्वारा लॉन्च किया गया है? यह एक "प्रमाण पत्र" -संबंधित समस्या हो सकती है। आपके प्रोग्राम के अभिभावक को देखने के लिए ProcExp (SysInternals द्वारा) का उपयोग करें। – data

उत्तर

1

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

//Create a registry key to read the default browser variable 
RegistryKey reader = Registry.ClassesRoot.OpenSubKey(@"http\shell\open\command"); 
//Determine the default browser 
string DefaultBrowser = (string)reader.GetValue(""); 

मैंने इस कोड का उपयोग करने का प्रयास किया, और पाया कि मेरी रजिस्ट्री कुंजी "- \"% 1 \ "" के साथ समाप्त हुई है।
मुझे नहीं पता कि यह वहां क्यों था, लेकिन मैं यह सुनिश्चित करने के लिए निम्न लूप का उपयोग करने की अनुशंसा करता हूं कि कुंजी सही जगह पर समाप्त हो।

//If the path starts with a ", it will end with a " 
if (DefaultBrowser[0] == '"') 
{ 
    for (int count = 1; count < DefaultBrowser.Length; count++) 
    { 
     if (DefaultBrowser[count] == '"') 
     { 
      DefaultBrowser = DefaultBrowser.Remove(count + 1); 
      count = DefaultBrowser.Length + 22; 
     } 
    } 
} 
//Otherwise, the path will end with a ' ' 
else 
{ 
    for (int count = 0; count < DefaultBrowser.Length; count++) 
    { 
     if (DefaultBrowser[count] == ' ') 
     { 
      DefaultBrowser = DefaultBrowser.Remove(count + 1); 
      count = DefaultBrowser.Length + 22; 
     } 
    } 
} 
+0

जैसा कि सवाल में बताया गया है कि समस्या डिफ़ॉल्ट ब्राउज़र नहीं ढूंढ रही है, यह ब्राउज़र को वर्तमान उपयोगकर्ता के रूप में खोल रहा है। – Constantin

+0

"अगर मैं इसे हर किसी विकल्प के साथ स्थापित करता हूं, जब मैं बटन दबाता हूं तो यह मेरी किसी भी हालिया सेटिंग्स (प्रॉक्सी, टूलबार प्रदर्शित आदि) के साथ आईई का एक संस्करण खोलता है" - इसके अनुसार, कॉन्स्टेंटिन, समस्या स्पष्ट रूप से मिल रही है वर्तमान उपयोगकर्ता से जुड़े डिफ़ॉल्ट ब्राउज़र। – Jack

0
using System.Diagnostics; 
using System.Windows.Forms; 

namespace WindowsFormsApplication13 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, System.EventArgs e) 
    { 
     // Add a link to the LinkLabel. 
     LinkLabel.Link link = new LinkLabel.Link(); 
     link.LinkData = "http://www.dotnetperls.com/"; 
     linkLabel1.Links.Add(link); 
    } 

    private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 
    { 
     // Send the URL to the operating system. 
     Process.Start(e.Link.LinkData as string); 
    } 
    } 
} 
+1

मैंने एक स्टैंडअलोन एप्लिकेशन बनाया है जो वास्तव में करता है और यह वांछित व्यवहार करता है। समस्या तब उत्पन्न होती है जब एप्लिकेशन को इंस्टॉलर के साथ बंडल किया जाता है और सभी के लिए इंस्टॉल किया जाता है। – Constantin

संबंधित मुद्दे