2012-01-12 35 views
6

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

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

अनिवार्य रूप से मैं Notepad के रास्ते के मूल्य के साथ

Computer\HKEY_CLASSES_ROOT\.rulog\shell\open\command\ 

के लिए कोई प्रविष्टि जोड़ने की जरूरत है।

संयोग से मैं में है कि .txt देख सकते हैं:

Computer\HKEY_CLASSES_ROOT\.txt\ShellNew 

“@%SystemRoot%\system32\notepad.exe,-470” 

की ITEMNAME के ​​लिए एक मूल्य है शायद मैं सिर्फ यह मान कॉपी कर सकते हैं? या यह खतरनाक है? (उदाहरण के लिए मौजूद नहीं है)।

+1

जिज्ञासा से बाहर, क्यों कुछ डेवलपर्स एक पाठ फ़ाइल के रूप में सरल कुछ के लिए अपने स्वयं के औचित्य फ़ाइल एक्सटेंशन बनाने पर जोर देते हैं? – KingCronus

+1

जिज्ञासा से, यदि आप जानते हैं कि नोटपैड आपकी फाइलें खोल सकता है, तो मौजूदा फ़ाइल एक्सटेंशन का उपयोग क्यों न करें? – murgatroid99

+0

यह बहुत संभव है कि एक आवेदन लिखा जाएगा जो इन फाइल प्रकारों के लिए निर्देशिका खोजेगा। हमारे पास पहले से ही .txt/.log अन्य लॉगिंग/जानकारी के लिए मौजूद है इसलिए यह केवल इसके लिए एक प्रावधान है। – Jeb

उत्तर

8

आप उपयोग कर सकते हैं:

Environment.GetEnvironmentVariable("windir") + "\\system32\\notepad.exe"; 

या और भी आसान:

Environment.SystemDirectory + "\\notepad.exe"; 

यह इसी तरह से कोई फर्क नहीं पड़ता जो ड्राइव ओएस पर है।

3

% systemroot% के साथ मान की प्रतिलिपि ठीक होना चाहिए। यदि यह ओएस के लिए काम करता है, तो यह आपके लिए काम करना चाहिए!

0

मूर्ख प्रूफ समाधान:

string NotepadPath = Environment.SystemDirectory + "\\notepad.exe"; 
if (System.IO.File.Exists(NotepadPath)) 
{ 
    Microsoft.Win32.Registry.SetValue("HKEY_CLASSES_ROOT\\.rulog\\shell\\open\\command\\", "", NotepadPath + " %1"); 
} 
else 
{ 
    //do something else or throw new ApplicationException("Notepad not found!"); 
}