डिफ़ॉल्ट एप्लिकेशन और मापदंडों के साथ सी # खुली फाइल


105

डिफ़ॉल्ट एप्लिकेशन के साथ फ़ाइल खोलने का सबसे आसान तरीका है:

System.Diagnostics.Process.Start(@"c:\myPDF.pdf");

हालांकि, मैं जानना चाहूंगा कि क्या डिफ़ॉल्ट एप्लिकेशन पर पैरामीटर सेट करने का कोई तरीका मौजूद है, क्योंकि मैं एक निर्धारित पृष्ठ संख्या में एक पीडीएफ खोलना चाहता हूं।

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

धन्यवाद।


क्या आपका मतलब है कि पीडीएफ फाइल के बजाय एडोब एक्जीक्यूटेबल को पैरामीटर भेजें, लेकिन पूर्ण पथ का उपयोग किए बिना?
बाली C

2
आप इस काम की उम्मीद कैसे करते हैं? यदि आपको एप्लिकेशन का पथ नहीं पता है, तो आप नहीं जानते कि डिफ़ॉल्ट PDF व्यूअर कौन सा है, और आपको पता नहीं है कि किस पैरामीटर प्रारूप का उपयोग करना है।
ken2k

2
क्या myProcess.StartInfo.FileName = "Acrobat.exe";आवेदन के लिए पूरा रास्ता दिए बिना कहना पर्याप्त नहीं है ?
daniloquio

1
इस SO प्रश्न पर एक नज़र डालें, यह देखने में मदद करता है
मार्क हॉल

2
@daniloquio: मुझे लगता है कि बिंदु यह है कि ओपी को पता नहीं है कि एंडोब फाइल के साथ पढ़ने के लिए उपयोगकर्ता ने अपने मशीन पर क्या स्थापित किया है, यह एक्रोबेट, एक्रोबैट रीडर या कुछ और हो सकता है।
सूरफबटलर

जवाबों:


45

यदि आप चाहते हैं कि फ़ाइल डिफ़ॉल्ट एप्लिकेशन के साथ खोली जाए, तो मेरा मतलब है कि एक्रोबेट या रीडर को निर्दिष्ट किए बिना, आप निर्दिष्ट पृष्ठ में फ़ाइल नहीं खोल सकते।

दूसरी ओर, यदि आप एक्रोबेट या रीडर निर्दिष्ट करने के साथ ठीक हैं, तो पढ़ते रहें:


आप इसे इस तरह से पूर्ण एक्रोबेट पथ बताए बिना कर सकते हैं:

Process myProcess = new Process();    
myProcess.StartInfo.FileName = "acroRd32.exe"; //not the full application path
myProcess.StartInfo.Arguments = "/A \"page=2=OpenActions\" C:\\example.pdf";
myProcess.Start();

अगर आप नहीं चाहते कि पीडीएफ रीडर के साथ खुले लेकिन एक्रोबेट के साथ, इस तरह से दूसरी पंक्ति का पीछा करें:

myProcess.StartInfo.FileName = "Acrobat.exe";

आप पीडीएफ फाइलों को खोलने के लिए डिफ़ॉल्ट एप्लिकेशन की पहचान करने के लिए रजिस्ट्री को क्वेरी कर सकते हैं और फिर तदनुसार अपनी प्रक्रिया के प्रारंभ में फाइलनाम को परिभाषित कर सकते हैं।

ऐसा करने के विवरण के लिए इस प्रश्न का अनुसरण करें: विंडोज पर एक विशेष फ़ाइल प्रकार खोलने के लिए डिफ़ॉल्ट एप्लिकेशन ढूँढना


2
+1 यह भी मुझे लगता है कि रजिस्ट्री में किसी भी फ़ाइल प्रकार '.pdf' से जुड़े एप्लिकेशन को देखना संभव है, फिर उस नाम को फ़ाइल नाम पैरामीटर में रखें। देखें stackoverflow.com/questions/162331/…
सर्फ़बटलर

2-पृष्ठ दृश्य में Adobe Reader प्राप्त करने के लिए कुछ खुले पैरामीटर हैं? बस उत्सुक, अगर कोई जानता है, कि असली उपयोगी होगा। मैं चारों ओर देख रहा हूं, लेकिन मुझे कुछ नहीं मिल रहा है।
टाकी मार्टिलो 16

20

यह करीब होना चाहिए!

public static void OpenWithDefaultProgram(string path)
{
    Process fileopener = new Process();
    fileopener.StartInfo.FileName = "explorer";
    fileopener.StartInfo.Arguments = "\"" + path + "\"";
    fileopener.Start();
}

1
यह बिल्कुल सही है !
फ्रेंकोइस गिरार्ड

1
यह मेरे लिए डिफ़ॉल्ट प्रोग्राम के साथ पीडीएफ खोलने के लिए काम करता है। धन्यवाद!
स्मिट्टी-वेर्बन-जार्ज-मैनजेंसन

1
@imgen प्रश्न पृष्ठ संख्या को एक परम के रूप में प्रदान करने के बारे में है। क्या यह उत्तर कवर किया गया है?
daniloquio

1
@daniloquio क्षमा करें, मैंने इस प्रश्न के बारे में गहराई से नहीं पढ़ा।
imgen

3
इसे एक ब्लॉकिंग ब्लॉक में लपेटना न भूलें, प्रोसेस आईडीसोफरेबल है।
रेने कारनेंट

7

मैंने xBl द्वारा C # से जुड़े ब्लॉग पोस्ट में VB कोड को परिवर्तित किया और इसे थोड़ा संशोधित किया:

public static bool TryGetRegisteredApplication(
                     string extension, out string registeredApp)
{
    string extensionId = GetClassesRootKeyDefaultValue(extension);
    if (extensionId == null)
    {
        registeredApp = null;
        return false;
    }

    string openCommand = GetClassesRootKeyDefaultValue(
            Path.Combine(new[] {extensionId, "shell", "open", "command"}));

    if (openCommand == null)
    {
        registeredApp = null;
        return false;
    }

    registeredApp = openCommand
                     .Replace("%1", string.Empty)
                     .Replace("\"", string.Empty)
                     .Trim();
    return true;
}

private static string GetClassesRootKeyDefaultValue(string keyPath)
{
    using (var key = Registry.ClassesRoot.OpenSubKey(keyPath))
    {
        if (key == null)
        {
            return null;
        }

        var defaultValue = key.GetValue(null);
        if (defaultValue == null)
        {
            return null;
        }

        return defaultValue.ToString();
    }
}

EDIT - यह अविश्वसनीय है। Windows पर किसी विशेष फ़ाइल प्रकार को खोलने के लिए डिफ़ॉल्ट एप्लिकेशन ढूँढना देखें ।


3

आप के साथ कोशिश कर सकते हैं

Process process = new Process();
process.StartInfo.FileName = "yourProgram.exe";
process.StartInfo.Arguments = ..... //your parameters
process.Start();

-5

कृपया प्रोजेक्ट के लिए गुणों के तहत सेटिंग्स जोड़ें और उन्हें इस तरह से उपयोग करें कि आपके पास स्वच्छ और आसान विन्यास सेटिंग्स हैं जिन्हें डिफ़ॉल्ट रूप से कॉन्फ़िगर किया जा सकता है

कैसे करें: डिज़ाइन समय पर एक नई सेटिंग बनाएँ

अपडेट: नीचे टिप्पणी के बाद

  1. प्रोजेक्ट पर राइट + क्लिक करें
  2. नए सामान को जोड़ो
  3. दृश्य C # आइटम के तहत -> सामान्य
  4. सेटिंग्स फ़ाइल का चयन करें

14
गलत टैब शायद? ;)
ken2k
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.