2013-06-05 5 views
8

मैं प्रोग्रामेटिक रूप से निर्देशिका में शॉर्टकट बनाने की कोशिश कर रहा हूं। मुझे कई उदाहरण मिल गए हैं, लेकिन कोई भी वास्तविक रूप से काम नहीं कर रहा है।सी # प्रोग्रामेटिक रूप से निर्देशिका में शॉर्टकट बनाना हमेशा काम नहीं करता

मैं निरीक्षण उत्पादित शॉर्टकट के गुणों में तीन अलग-अलग परिणाम:

  1. फ़ाइल का शॉर्टकट प्रकार के रूप में "शॉर्टकट (.lnk)" जो पॉप अप करने के मेरे लिए पूछ कारण संवाद बॉक्स के साथ खोलें असाइन किया गया है इसे एक विस्तार संलग्न करें।

  2. फ़ाइल प्रॉपर्टी का शॉर्टकट प्रकार "फ़ाइल" के रूप में असाइन किया गया है जो डबल क्लिक होने पर बिल्कुल कुछ भी नहीं करता है।

  3. या आखिरकार जो मेरा पसंदीदा है ... फ़ाइल प्रॉपर्टी का शॉर्टकट प्रकार इस प्रकार है: "फ़ाइल फ़ोल्डर" जो इस तरह काम करता है।

यहां कोड है जिसका मैं वर्तमान में उपयोग कर रहा हूं ... मैंने इसके कुछ बदलाव किए हैं।

bool IsExists = false; 
string icon = appPath + "Welcome.ico"; 

// Their is a difference to local and ClickOnce App locations... this compensates for it 
IsExists = System.IO.File.Exists(icon); 
if (!IsExists) 
{ 
    icon = appPath + @"bin\Debug\Welcome.ico"; 

} 

var desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); 
var target = (Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Artronix\Welcome To FreightWare Online\").Replace(@"\","/"); 
IWshShortcut shortcut; 
var wshShell = new WshShellClass(); 
shortcut = (IWshShortcut)wshShell.CreateShortcut(Path.Combine(desktop, @"FreightWare Resources.lnk")); 
shortcut.IconLocation = icon; 
shortcut.TargetPath = Path.GetFullPath(target); 
shortcut.Save(); 
+1

मुझे संदेह है कि ऐपपैथ इस जानकारी के साथ अपराधी है। अपने कोड के दूसरे भाग (और अपनी खुद की सेट .ico फ़ाइल का उपयोग करके) का उपयोग करके, मुझे हमेशा तीसरा परिणाम मिलता है। जब लक्ष्य पथ मौजूद नहीं था तब मैंने केवल पहला परिणाम प्राप्त किया था। यदि आप परिणामों को अलग-अलग स्थितियों के तहत संकुचित कर सकते हैं, तो – panhandel

+0

सहायता कर सकते हैं यहां ऐपपैथ है: निजी स्ट्रिंग ऐपपाथ = System.AppDomain.CurrentDomain.BaseDirectory; अंतर इस तथ्य में निहित है कि अगर मैं स्थानीय रूप से इंस्टॉलशील्ड या वीएस के माध्यम से इस ऐप को इंस्टॉल करता हूं तो यह ऐपपैथ के समान डोमेन फ़ाइल आइकन इंस्टॉल करता है ... लेकिन जब मैं किसी कारण के लिए केवल एक क्लिकऑन वेब चलाता हूं तो यह एक और बिन और डीबग फ़ोल्डर जोड़ता है ऐपपैथ निर्देशिका के भीतर ... यदि एपपैथ में नहीं मिला तो अगर कथन कथन है तो विस्तारित निर्देशिका के अंदर देखें। यह भी ध्यान रखें कि आइकन हमेशा शॉर्टकट के भीतर प्रदर्शित होता है, इसलिए मुझे पता है कि यह सही पथ ढूंढ रहा है। –

+0

मैं डाउनवोट करने के लिए बहुत मोहक हूं, सिर्फ इसलिए कि आप अपवॉट्स के लिए पूछ रहे हैं। मुझे यकीन है कि कहीं भी इसके खिलाफ एक नियम है, इसके अलावा यह एक स्पष्ट इंटरनेट अशुद्ध-पैस है। – Mels

उत्तर

2

ShellLink का प्रयास करें:

using (ShellLink shortcut = new ShellLink()) 
{ 
    shortcut.Target = Application.ExecutablePath; 
    shortcut.WorkingDirectory = Path.GetDirectoryName(Application.ExecutablePath); 
    shortcut.Description = "My Shorcut Name Here"; 
    shortcut.DisplayMode = ShellLink.LinkDisplayMode.edmNormal; 
    shortcut.Save("%HOMEPATH%/Desktop/"); 
} 
2

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

यह पता चला कि कोड के साथ कुछ भी गलत नहीं था। पैनहाउंडेल ने मुझे यह बयान दिया कि उन्होंने समाधान कहां पाया, जब उन्होंने बयान दिया: "मैंने केवल पहला परिणाम हासिल किया जब लक्ष्य पथ मौजूद नहीं था।" चूंकि वह हमेशा सही परिणाम प्राप्त कर रहा था और वह केवल परिणाम प्राप्त कर रहा था जब निर्देशिका मौजूद नहीं थी ... मुझे एहसास हुआ कि समस्या यह हो सकती है कि मैं एक पंक्ति में प्रोग्रामेटिक रूप से निर्देशिका बनाउंगा, फिर अगले आइकन में .. मुझे निर्देशिका को पूरी तरह से बनाने के लिए सिस्टम को अधिक समय देने की आवश्यकता है

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