2009-03-11 9 views
5

.NET 1.0 दिनों में वापस मैंने एमएस विंडोज़ पर शॉर्टकट के लक्ष्य को वापस करने के लिए एक विधि लिखी। यह विंडोज़ स्क्रिप्ट के लिए एक इंटरॉप का उपयोग कर होस्टिंग ऑब्जेक्ट मॉडल और जानवर COM इंटरफेस के माध्यम से मजबूर के माध्यम से ऐसा किया:क्या COM का उपयोग किये बिना सी # में प्रोग्रामिंग रूप से विंडोज़ फ़ाइल सिस्टम शॉर्टकट का पालन करने का कोई तरीका है?

private FileInfo GetFileFromShortcut(FileInfo shortcut) 
{ 
    FileInfo targetFile = null; 

    try 
    { 
     IWshRuntimeLibrary.WshShell wShell = new IWshRuntimeLibrary.WshShellClass(); 
     IWshRuntimeLibrary.WshShortcut wShortcut = (IWshRuntimeLibrary.WshShortcut)wShell.CreateShortcut(shortcut.FullName); 

     // if the file wasn't a shortcut then the TargetPath comes back empty 
     string targetName = wShortcut.TargetPath; 
     if (targetName.Length > 0) 
     { 
      targetFile = new FileInfo(targetName); 
     } 
    } 
    catch (Exception) 
    { // will return a null targetFile if anything goes wrong 
    } 

    return targetFile; 
} 

यह अभी भी कीड़े मुझे, और मैं और अधिक सुरुचिपूर्ण कुछ के साथ इस को बदलने के लिए देख रहा था, लेकिन केवल तभी जब प्रतिस्थापन वास्तव में कम से कम काम करता है। मुझे अभी भी एक शॉर्टकट के लक्ष्य को खोजने का मूल सी # तरीका नहीं मिल रहा है। क्या कोई है, या यह अभी भी इस तरह की चीज करने का सबसे अच्छा तरीका है?

+0

शानदार सवाल। इस बारे में सोचा नहीं है कि COM इंटरॉप – Sung

+0

के बिना यह काम कैसे प्राप्त किया जाए, दुर्भाग्य से यह प्राप्त करने के लिए मैं अप्रबंधित कोड के माध्यम से खोल का उपयोग नहीं कर सका। – RobS

उत्तर

1

ऐसा लगता है कि किसी ने ShellLink नामक शॉर्टकट फ़ाइलों में हेरफेर करने के लिए एक कक्षा लिखी है, लेकिन यह भी COM का उपयोग करता है।

+0

किसी अन्य परत के पीछे COM गतिविधि को छिपाना वास्तव में ऐसा नहीं था जो मैं करना चाहता था - मैं इस कोड को ओपन सोर्स प्रोजेक्ट में प्रकाशित करना चाहता हूं और COM bashing भाग को पसंद नहीं आया। लेकिन अगर कोई अन्य रास्ता नहीं है .... –

+1

आप COM का उपयोग क्यों नहीं करना चाहते हैं? Usign IShellLink चीजों को करने का सही तरीका है क्योंकि वह एपीआई है जो विंडोज शॉर्टकट पार्सिंग/मोडिटिफिकेशन के लिए प्रदान करता है। आपका मूल कोड जो विंडोज स्क्रिप्टिंग होस्ट का उपयोग करता था, चीजों को करने का सबसे अच्छा तरीका नहीं था, लेकिन ऐसा इसलिए था क्योंकि यह एक रैपर ऑब्जेक्ट का इस्तेमाल करता था जो स्क्रिप्टिंग भाषाओं के लिए डिज़ाइन किया गया था, न कि क्योंकि यह COM ऑब्जेक्ट का उपयोग करता था। विंडोज़ पर हर समय दृश्यों के पीछे COM का उपयोग किया जाता है; यह अपरिहार्य है। –

1

क्या आप सिर्फ .lnk या .url फ़ाइल नहीं खोल सकते हैं और इसे पार्स कर सकते हैं?

यह एक ही बात के बारे में बात और पता चलता है कि फाइलों की तरह लग रहे: http://www.programmingtalk.com/showthread.php?t=7335

+1

मुझे यकीन नहीं है कि एक ऐसी फाइल को पार्स करना जिसमें प्रकाशित परिभाषा नहीं है, वह ऐसा कुछ है जिसे मैं अपने उत्पादन कोड में भरोसा करना चाहता हूं। एक सुरक्षित कामकाज है जो कम से कम COM इंटरफ़ेस को दबा रहा है, मुझे पता है कि हमेशा काम करेगा। –

0

मैंने कुछ समय पहले भी इस में दिलचस्पी है।

एलएनके फाइलों के एक (अनौपचारिक) description of the format के लिंक के साथ स्वीकृत response स्वीकार किया गया है। जाहिर है, सभी उपलब्ध विधियां अभी तक कुछ एपीआई के माध्यम से जाएं।

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

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