2011-08-29 16 views
7

में एक दूरस्थ मशीन पर वातावरण चर के वास्तविक मूल्यों जाओ मैं वास्तविक मान वातावरण चर की पाने के लिए कोशिश कर रहा हूँ।
यह वही है मैं अब तक है:नेट

काम करता है यही कारण है कि, लेकिन यहाँ समस्या है: नाम रूप 'windir' गुजर '% SystemRoot%' हो जाता है मूल्य के रूप में। मैं वास्तव में चाहता हूंवास्तविक पथ, यानी 'सी: \ विंडोज' है।

मैं प्रत्यावर्तन का उपयोग कर 'SystemRoot' की मूल्य लेकिन कोई मिलान नहीं पाए गए पाने की कोशिश की

मैं कैसे सुनिश्चित कर सकता हूं कि वास्तविक मान वापस आ गए हैं?
Thx!

+2

% SystemRoot% क्यों स्वीकार्य नहीं है? यदि आप इसे एक एक्सप्लोरर विंडो में डालते हैं तो आप विंडोज़ की स्थापना निर्देशिका में जाएंगे। क्योंकि% SystemRoot% सिद्धांत में डी: \ विंडोज \ हो सकता है। –

+0

संभावित डुप्लिकेट [.NET के साथ दूरस्थ रूप से पर्यावरण चर का विस्तार कैसे करें?] (Http://stackoverflow.com/questions/5031111/how-to-expand-environment-variables-remotely-with-net) – VVS

+0

@ रामाउंड: I मैं एक विधि लिख रहा हूं जो ** ** Win32_Process.Create ** का उपयोग कर रिमोट मशीन पर कमांड ** चलाता है। ** पर्यावरण चर ** ** प्रतीत नहीं होता ** ** प्रतीत होता है, इसलिए मैं उन्हें ** ** खुद को प्रतिस्थापित कर रहा था। यदि ** ** उन्हें स्वचालित रूप से मान्यता प्राप्त करने का तरीका ** है, तो यह ** मेरी समस्या का समाधान भी करेगा **। – David

उत्तर

-2

उपयोग Environment.GetFolderPath(Environment.SpecialFolder.System)

+2

प्रश्न शीर्षक एक दूरस्थ मशीन पर कहते हैं। – TheCodeKing

0

आप इस के लिए Win32_Environment उपयोग नहीं कर सकते, लेकिन आप दूरस्थ रजिस्ट्री का उपयोग कर सकते हैं।

RegistryKey environmentKey = RegistryKey.OpenRemoteBaseKey(
     RegistryHive.LocalMachine, "\\server"); 
RegistryKey key = environmentKey.OpenSubKey(
     @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment", false); 
string value = (string)key.GetValue("System"); 
2

system path variables लिए, (जैसे %SystemRoot%) वहाँ कोई सुविधाजनक तरीका है।

आपको संबंधित रजिस्ट्री मानों को पढ़कर इन मानों को स्वयं देखना होगा।

  • % SystemRoot%: यहाँ 'एक (पूरा नहीं हुआ) इन प्रणाली चर में से कुछ की सूची

    HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot
    या

    select windowsdirectory from Win32_OperatingSystem
  • % SystemDrive%% SystemRoot का परीक्षण करके निर्धारित किया जा सकता %

चर की तरह % AppData%
बहुत ज्यादा भूमि के ऊपर शायद:
उपयोगकर्ता पर निर्भर है और

HKEY_USERS\<user SID>\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\AppData

+0

जो मेरे लिए% SystemRoot% प्राप्त करेगा, लेकिन **% प्रोग्रामफाइल% ** या अन्य नहीं। मुझे लगता है कि मैं पर्यावरण के दूरस्थ संस्करण की तलाश में हूं। GETEnvironmentVariable – David

+1

@ डेविड: कोई दूरस्थ संस्करण नहीं है। एक विकल्प 'पर्यावरण। GETEnvironmentVariable' को दूरस्थ रूप से निष्पादित करना होगा, उदा। रिमोट मशीन पर एक प्रोग्राम शुरू करके। – VVS

1

के नीचे पाया मैं जानता हूँ कि यह सबसे अच्छा रचनात्मक है, लेकिन यह आसान समाधान हो रहा है कर रहे हैं?

 using (var process = new Process()) 
     { 
      process.StartInfo.FileName = @"C:\PsTools\PsExec.exe"; 
      process.StartInfo.Arguments = @"\\machineName cmd /c echo " + environmentVar; 
      process.StartInfo.UseShellExecute = false; 
      process.StartInfo.CreateNoWindow = true; 
      process.StartInfo.RedirectStandardOutput = true; 
      process.Start(); 
      return process.StandardOutput.ReadToEnd(); 
     } 
+0

'शायद बहुत अधिक ओवरहेड?' बिलकुल नहीं। विशेष रूप से जब रिकर्सिव चर को हल करने की कोशिश कर रहे खरगोश के निशान का पीछा करने के ऊपरी हिस्से के खिलाफ सेट किया जाता है: '% ComSpec% =% SystemRoot% \ System32 \ cmd.exe'। कितना बुरा सपना। जब मैंने आपका जवाब देखा तो मैं हारने वाला था। अच्छी चाल। – InteXX