2011-05-23 11 views
8

में रजिस्ट्री मानों के रूप में विंडोज़ पर्यावरण चर का उपयोग करना अरे, मैं एक रजिस्ट्री प्रविष्टि के लिए मान के रूप में विंडोज वातावरण चर का उपयोग करना चाहता हूं। दुर्भाग्य से मैं बस %systemroot%\system32\MyScreensaver.scr की तरह sth लिख नहीं सकता।विजुअल स्टूडियो इंस्टॉलर

जैसा कि आप अनुमान लगा सकते हैं, मैं अपने स्वयं के ऐप, जैसे ऑटो स्टार्ट और स्क्रीनसेवर और कुछ अन्य चीजों पर कुछ reg मानों को इंगित करना चाहता हूं।

कोई विचार?

+0

वीएस-इंस्टॉलर का उपयोग करके एक विशेष स्क्रीनसेवर स्वत: शुरू करने और सेट करने के लिए प्रोग्राम को कैसे सेट करें, इसके अलावा भी हैं :) –

+0

मैंने अपना जवाब जोड़ा है जिसके लिए किसी भी कोडिंग की आवश्यकता नहीं है। मेरा जवाब किसी और के लिए ऐप में कुछ कोड नहीं ढूंढने के लिए अधिक है, लेकिन नेटवर्क प्रशासकों द्वारा इसका उपयोग किया जाता है। ;) –

उत्तर

8

विंडोज रजिस्ट्री REG_EXPAND_SZ रजिस्ट्री मान प्रकार के साथ इस मूल रूप से समर्थन करती है।

जब आप रजिस्ट्री कुंजी मान में पर्यावरण चर को एम्बेड करना चाहते हैं तो REG_SZ के बजाय REG_EXPAND_SZ का उपयोग करें।

यहाँ सी # एक REG_EXPAND_SZ तक पहुँचने कोड का एक उदाहरण है और विस्तार स्वचालित रूप से नियंत्रित किया जाता है:

registry.SetValue("TEMP", @"%USERPROFILE%\AppData\Local\Temp", RegistryValueKind.ExpandString); 

अन्य प्लेटफार्मों या पटकथा:

var registry = Registry.CurrentUser.OpenSubKey("Environment"); 
var temp = registry.GetValue("TEMP") as string; 

यहाँ एक विस्तार योग्य रजिस्ट्री मान बनाने का एक उदाहरण है भाषाओं का समर्थन करने के लिए अन्य तंत्र हैं।

5

आप Windows इंस्टालर formatted type उपयोग कर सकते हैं: यहाँ REG_EXPAND_SZ के निम्न स्तर Win32 वर्णन है। उदाहरण के लिए, आपका रजिस्ट्री मान हो सकता है:

[%SystemRoot]\system32\MyScreensaver.scr 

इस प्रकार विंडोज इंस्टालर स्वचालित रूप से स्थापना के दौरान पर्यावरण चर को हल करेगा।

+1

मेरी इच्छा है कि मैं दो उत्तरों को सही के रूप में चिह्नित कर सकूं। –

1

यह एक तरह का मुश्किल है लेकिन करना बहुत आसान है। यह उदाहरण आपको एक निश्चित प्रकार की फ़ाइल (* .test) को एक प्रोग्राम (नोटपैड ++) के साथ खोलने की अनुमति देगा जो उपयोगकर्ता विशिष्ट निर्देशिका में रहता है। मैंने अपने विंडोज 2008 सर्वर पर रिमोट डेस्कटॉप (एकेए टर्मिनल सर्वर) चलाने वाले एक परिदृश्य के लिए इसका इस्तेमाल किया ताकि प्रत्येक उपयोगकर्ता प्रति उपयोगकर्ता खाते को स्थापित प्रोग्राम का उपयोग कर सके ताकि अलग-अलग सेटिंग्स प्रति उपयोगकर्ता (ex: * .ini फाइलों के भीतर स्थित हो सकें) ऐप्स निर्देशिका)। नोट: यह महत्वपूर्ण नहीं है लेकिन फ़ोल्डर "प्रोग्राम" छिपा हुआ है ताकि उपयोगकर्ता इसे न देख सकें।

Paths: 
Application (notepad++): Y:\%username%\programs\Notepad++\notepad++.exe 
File To Open (File.test): Y:\%username%\TestFiles\File.test 

चरण 1. यदि आप उपयोग कर रहे अनिवार्य प्रोफाइल NTUSER.MAN फ़ाइल NTUSER.DAT पर वापस जाने के लिए सुनिश्चित हो।

चरण 2. उस प्रोफ़ाइल में लॉग इन करें जिसे आप दूरस्थ डेस्कटॉप क्लाइंट का उपयोग करके संपादित करना चाहते हैं।

चरण 3. regedit खोलें और यदि वे मौजूद हैं तो निम्न कुंजी हटाएं।

HKEY_CURRENT_USER \ Software \ Classes \ आवेदन \ नोटपैड ++। Exe HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ एक्सप्लोरर \ FileExts.test

चरण 4। एक नई टेक्स्ट फ़ाइल बनाएं और इसे "original.reg" नाम दें। पालन ​​करते हुए उसे भरें ...

Windows Registry Editor Version 5.00 

[HKEY_CURRENT_USER\Software\Classes\Applications\notepad++.exe] 

[HKEY_CURRENT_USER\Software\Classes\Applications\notepad++.exe\shell] 

[HKEY_CURRENT_USER\Software\Classes\Applications\notepad++.exe\shell\open] 

[HKEY_CURRENT_USER\Software\Classes\Applications\notepad++.exe\shell\open\command] 
@="" 

चरण 5. ताज़ा रजिस्ट्री (F5) और नई कुंजी खोजें। "कमांड" कुंजी को "(डिफ़ॉल्ट)" मान खाली के साथ देखना चाहिए। "कमांड" कुंजी में "नया मान # 1" नामक एक नया "विस्तारणीय स्ट्रिंग मान" जोड़ें। मूल्य को एप्लिकेशन के पथ "वाई: \% उपयोगकर्ता नाम% \ प्रोग्राम \ नोटपैड ++ \ नोटपैड ++। Exe" "% 1" पर मान सेट करें। फिर "expanded.reg" के रूप में डेस्कटॉप पर "कमांड" कुंजी निर्यात करें।

चरण 6. संपादित करें नोटपैड में "expanded.reg" फ़ाइल और सभी डेटा के बाद "# 1 नया मान" कॉपी। पूर्व: = हेक्स (2): 22 ...

Windows Registry Editor Version 5.00 

[HKEY_CURRENT_USER\Software\Classes\Applications\notepad++.exe\shell\open\command] 
@="" 
"New Value #1"=hex(2):22,00,59,00,3a,00,5c,00,25,00,75,00,73,00,65,00,72,00,6e,00,\ 
61,00,6d,00,65,00,25,00,5c,00,70,00,72,00,6f,00,67,00,72,00,61,00,6d,00,73,\ 
00,5c,00,4e,00,6f,00,74,00,65,00,70,00,61,00,64,00,2b,00,2b,00,5c,00,6e,00,\ 
6f,00,74,00,65,00,70,00,61,00,64,00,2b,00,2b,00,2e,00,65,00,78,00,65,00,22,\ 
00,20,00,22,00,25,00,31,00,22,00,00,00 

चरण 7. बंद expanded.reg फ़ाइल और "original.reg" फ़ाइल को खोलने के लिए डिफ़ॉल्ट रूप आदेश की जगह (कि रिक्त है "") हमारे हेक्सबोर्ड के नए हेक्स वैल्यू के साथ हमारे क्लिपबोर्ड में है। फ़ाइल "original.reg" अब ऐसा दिखाई देगा ...

Windows Registry Editor Version 5.00 

[HKEY_CURRENT_USER\Software\Classes\Applications\notepad++.exe] 

[HKEY_CURRENT_USER\Software\Classes\Applications\notepad++.exe\shell] 

[HKEY_CURRENT_USER\Software\Classes\Applications\notepad++.exe\shell\open] 

[HKEY_CURRENT_USER\Software\Classes\Applications\notepad++.exe\shell\open\command] 
@=hex(2):22,00,59,00,3a,00,5c,00,25,00,75,00,73,00,65,00,72,00,6e,00,\ 
61,00,6d,00,65,00,25,00,5c,00,70,00,72,00,6f,00,67,00,72,00,61,00,6d,00,73,\ 
00,5c,00,4e,00,6f,00,74,00,65,00,70,00,61,00,64,00,2b,00,2b,00,5c,00,6e,00,\ 
6f,00,74,00,65,00,70,00,61,00,64,00,2b,00,2b,00,2e,00,65,00,78,00,65,00,22,\ 
00,20,00,22,00,25,00,31,00,22,00,00,00 

चरण 8. अब है कि हम अपने जाने के लिए सिर्फ आवेदन के साथ संबद्ध करने के लिए एक विस्तार जोड़ने देते हैं चर तैयार विस्तार किया। "Original.reg" फ़ाइल में वह ऐसा दिखाई बनाने जोड़ें ...

Windows Registry Editor Version 5.00 

[HKEY_CURRENT_USER\Software\Classes\Applications\notepad++.exe] 

[HKEY_CURRENT_USER\Software\Classes\Applications\notepad++.exe\shell] 

[HKEY_CURRENT_USER\Software\Classes\Applications\notepad++.exe\shell\open] 

[HKEY_CURRENT_USER\Software\Classes\Applications\notepad++.exe\shell\open\command] 
@=hex(2):22,00,59,00,3a,00,5c,00,25,00,75,00,73,00,65,00,72,00,6e,00,\ 
61,00,6d,00,65,00,25,00,5c,00,70,00,72,00,6f,00,67,00,72,00,61,00,6d,00,73,\ 
00,5c,00,4e,00,6f,00,74,00,65,00,70,00,61,00,64,00,2b,00,2b,00,5c,00,6e,00,\ 
6f,00,74,00,65,00,70,00,61,00,64,00,2b,00,2b,00,2e,00,65,00,78,00,65,00,22,\ 
00,20,00,22,00,25,00,31,00,22,00,00,00 

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.test] 

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.test\OpenWithList] 
"a"="notepad++.exe" 
"MRUList"="a" 

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.test\OpenWithProgids] 
"Notepad++_file"=hex(0): 

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.test\UserChoice] 
"Progid"="Applications\\notepad++.exe" 

चरण 9. regedit खोलें और यदि वे मौजूद निम्नलिखित कुंजियां हटाएं। (हाँ इसे फिर से करें) ... अब रजिस्ट्री ऐसा है जैसे हमने कभी भी कुछ नहीं किया और हमारे पास रजिस्ट्री में सम्मिलित करने के लिए एक रजिस्ट्री फ़ाइल तैयार है!

HKEY_CURRENT_USER \ Software \ Classes \ आवेदन \ नोटपैड ++। Exe HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ एक्सप्लोरर \ FileExts.test

चरण 10 आप इस लागू करना चाहते हैं वर्तमान प्रोफ़ाइल के लिए फिर रजिस्ट्रेशन फ़ाइल "original.reg" चलाएं और इसे रजिस्ट्री में डालें।

और बस हो गया! अब सभी * .test फ़ाइलें "वाई: \% उपयोगकर्ता नाम% \ प्रोग्राम \ नोटपैड ++ \ नोटपैड ++। Exe" के साथ खुल जाएंगी। रजिस्ट्री की जांच करें और नई डिफ़ॉल्ट प्रविष्टि देखें।

0

एक विस्तार योग्य स्ट्रिंग

DWORD = DWORD उपयोग: विस्तार योग्य स्ट्रिंग = हेक्स (2): बहु स्ट्रिंग = हेक्स (7):

एक DWORD एक 32-बिट अहस्ताक्षरित पूर्णांक (रेंज है: 0 42 9 4 9 672 9 5 दशमलव के माध्यम से) रजिस्ट्री में, एक DWORD हमेशा 0x के साथ शुरू होता है। रजिस्ट्री में, DWORDS में हमेशा 8 अंक होते हैं जो 0x का पालन करते हैं। यह दशमलव या हेक्साडेसिमल प्रारूप में हो सकता है, 1000 को 0x00001000 या 0x000003e8

DWORDS केवल 0-9 अंकों का उपयोग कर सकता है। स्ट्रिंग्स, किसी भी प्रकार, हमेशा एएससीआईआईआई का उपयोग करते हैं, एसीएसआईआई 1000 में केवल 31,30,30,30 के रूप में लिखा जा सकता है स्ट्रिंग डेटा प्रकार के लिए, एएससीआईआई बिना किसी जानकारी के पृष्ठभूमि में काम करता है। ऐसा इसलिए है क्योंकि कंप्यूटर केवल 1s और 0s को समझता है।विस्तारणीय स्ट्रिंग और मल्टी स्ट्रिंग डेटा प्रकारों के लिए, ये आपकी प्रविष्टियों को एक हेक्साडेसिमल प्रारूप में ASCII कोड की श्रृंखला के रूप में सहेजते हैं, जो अल्पविराम और हेक्स शून्य से अलग होते हैं। तो, 1000 का एक विस्तारणीय स्ट्रिंग होगा: हेक्स (2): 31,00,30,00,30,00,30,00

तो चलिए% PROGRAMFILES% को एक विस्तारणीय स्ट्रिंग में परिवर्तित करते हैं। सबसे पहले, इसे डाउनलोड करें: https://hotfile.com/dl/244097278/55aa086/ASCII_2_HEX_Conversion_Tool.7z.html

अब किसी भी आधुनिक ब्राउज़र में इसे खोलें। % PROGRAMFILES% को ASCII बॉक्स में रखें, और इसे एन्कोड करें चुनें। यह आपको% 25% 50% 52% 4 एफ% 47% 52% 41% 4 डी% 46% 49% 4 सी% 45% 53% 25 टेक्स्ट पेस्ट में पेस्ट कॉपी करें, पहले% को अंत में ले जाएं। प्रतिस्थापन आदेश का चयन करें, सभी "%" ढूंढें और "00," के साथ प्रतिस्थापित करें। बहुत अंत में अल्पविराम निकालें। आपको मिलना चाहिए: 25,00,50,00,52,00,4 एफ, 00,47,00,52,00,41,00,4 डी, 00,46,00,49,00,4 सी, 00,45, 00,53,00,25,00 और अंत में, हेक्स (2): 25,00,50,00,52,00,4F, 00,47,00,52,00,41,00,4 डी, 00,46 , 00,49,00,4 सी, 00,45,00,53,00,25,00

हो गया।

क्या आपने कभी एक उत्सुक हेक्स रजिस्ट्री प्रविष्टि को ASCII में परिवर्तित करने का प्रयास किया है और दुर्भाग्य से विफल रहा है। इस पाठ में किसी भी हेक्स कोडित रजिस्ट्री प्रविष्टि को एन्क्रिप्टेड नहीं करने वाले इंजीनियर को रिवर्स करने के लिए आवश्यक सभी ज्ञान शामिल हैं। मज़े करो!

1

यह रिक Sladkey के जवाब पर एक विस्तार:

उसने जवाब दिया था REG_EXPAND_SZ आप जो सही है पर्यावरण चर का उपयोग करने की अनुमति देगा लेकिन आप यह भी ध्यान रखें कि कुछ रजिस्ट्री कार्यक्षमताओं केवल काम एक कुंजी की डिफ़ॉल्ट प्रविष्टि के साथ। उदाहरण के लिए, आप सेटअप करने के लिए उदाहरण कहा जाता है विंडोज खोल में संदर्भ मेनू के लिए एक कमांड चाहते कहना (सुलभ जब सही एक फ़ोल्डर की पृष्ठभूमि पर क्लिक):

[HKEY_CLASSES_ROOT\Directory\Background\shell\Example\command] 

और आदेश आप इनपुट करना चाहते है:

cmd.exe /s /c echo Your home path is located at %homedrive%%homepath% & pause 

यह केवल तभी काम करेगा जब डिफ़ॉल्ट प्रविष्टि REG_EXPAND_SZ है जबकि एक कुंजी बनाते समय Regedit द्वारा बनाई गई डिफ़ॉल्ट प्रविष्टियां REG_SZ हैं। यदि आप रेजीडिट का उपयोग कर रहे हैं, तो आपको आरईजी_SZ से REG_EXPAND_SZ तक डिफ़ॉल्ट प्रविष्टि को परिवर्तित करने के लिए कुछ एक्रोबेटिक्स करना होगा क्योंकि Regedit स्वयं ऐसा नहीं कर सकता है। ऐसा करने के लिए आवश्यक कार्य यहां दिया गया है:

कमांड कुंजी के भीतर, मेरे उदाहरण पर वापस जाकर, एक REG_EXPAN_SZ प्रविष्टि बनाएं। इसे डबल क्लिक करें और अपनी पसंद का कमांड इनपुट करें। उदाहरण के लिए:

cmd.exe /s /c echo Your home path is located at %homedrive%%homepath% & pause 

जो प्रविष्टि आपने अभी बनाई है वह डिफ़ॉल्ट प्रविष्टि नहीं होगी और इस बिंदु पर खोल इसे निष्पादित नहीं कर सकता है। इसे ठीक करने के लिए, कमांड रजिस्ट्री कुंजी पर राइट क्लिक करें और इसे command.reg के रूप में निर्यात करें। आपका निर्यात reg फ़ाइल इस तरह दिखना चाहिए:

Windows Registry Editor Version 5.00 

[HKEY_CLASSES_ROOT\Directory\Background\shell\Example] 

[HKEY_CLASSES_ROOT\Directory\Background\shell\Example\command] 
@="" 
"New Value #1"=hex(2):63,00,6d,00,64,00,2e,00,65,00,78,00,65,00,20,00,2f,00,73,\ 
    00,20,00,2f,00,63,00,20,00,65,00,63,00,68,00,6f,00,20,00,59,00,6f,00,75,00,\ 
    72,00,20,00,68,00,6f,00,6d,00,65,00,20,00,70,00,61,00,74,00,68,00,20,00,69,\ 
    00,73,00,20,00,6c,00,6f,00,63,00,61,00,74,00,65,00,64,00,20,00,61,00,74,00,\ 
    20,00,20,00,25,00,68,00,6f,00,6d,00,65,00,64,00,72,00,69,00,76,00,65,00,25,\ 
    00,25,00,68,00,6f,00,6d,00,65,00,70,00,61,00,74,00,68,00,25,00,20,00,26,00,\ 
    20,00,70,00,61,00,75,00,73,00,65,00,00,00 

जाहिर हैश आप एक अलग आदेश का उपयोग कर रहे हैं तो अलग अलग होंगे।डिफ़ॉल्ट प्रविष्टि में REG_EXPAND_SZ प्रविष्टि बदलने के लिए, बस @ = "" लाइन हटा सकते हैं और नाम बदलने

"New Value #1"=hex(2)....etc...etc 

को

@=hex(2)....etc...etc 

(ध्यान दें कि यहां @ आसपास कोई उद्धरण चिह्न) है।

एक बार जब आप अपना मोड कर लेंगे, तो बस command.reg मर्ज करें और डिफ़ॉल्ट प्रविष्टि अब REG_EXPAND_SZ प्रारूप में होगी।

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