Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C#

Set System Env Variable Using .Net ManagementScope

5.00/5 (2 votes)
29 Oct 2010CPOL 14.7K  
Use of .Net ManagementScope
Hi,

I had to Get/Set env variables of a remote/local computer in my project under given credentials with the help of ManagementScope.But, Didn't get any proper help and hence posting this one just for other programmers...


//Includes a new path to the System(Local/Remote) Environment variable 'Path'
       private void SetEnvPath(bool isRemote, string MachineName, string _UserName, string _Password, FileInfo fileInfo)
       {
           ManagementObjectSearcher query = null;
           ManagementObjectCollection queryCollection = null;
           ConnectionOptions _COption = new ConnectionOptions();
           //If the Target Computer is not local, Supply credentials and enable user privilages if required.
           if (isRemote)
           {
               _COption.Username = _UserName;
               _COption.Password = _Password;
               _COption.EnablePrivileges = true;
           }
           try
           {
               //Create Management scope for the target machine
               ManagementScope _Scope = new ManagementScope("\\\\" + MachineName + "\\root\\cimv2", _COption);
               //Create a management Class with ManagementPath
               //Win32_Environment, To get all Environment variables of Target computer.< Win32_Environment:Path > will get only 'Path' variable.
               //ManagementClass _Class = new ManagementClass(_Scope, new ManagementPath("Win32_Environment:Path"), new ObjectGetOptions());
               _Scope.Options.Timeout = TimeSpan.FromSeconds(5);
               _Scope.Connect();

               //Query to be run against target computer.
               //This will select only 'Path' varibles from all Environment variables.
               ObjectQuery setQuery = new ObjectQuery("SELECT * FROM Win32_Environment WHERE name='Path'");
               query = new ManagementObjectSearcher(_Scope, setQuery);
               queryCollection = query.Get();

               string test = "";
               if (queryCollection.Count > 0)
               {
                   foreach (ManagementObject EnvVar in queryCollection)
                   {
                       test = EnvVar.GetText(TextFormat.Mof);
                       if (test.Contains("Path") && !EnvVar["VariableValue"].ToString().Contains(fileInfo.DirectoryName))
                       {
                           //EnvVar["VariableValue"] - Value of the Environment variable 'Path'
                           if (EnvVar["VariableValue"].ToString().EndsWith(";"))
                               EnvVar["VariableValue"] = (object)(((string)EnvVar["VariableValue"]) + fileInfo.DirectoryName.ToString() + ";");
                           else
                               EnvVar["VariableValue"] = (object)(((string)EnvVar["VariableValue"]) + ";" + fileInfo.DirectoryName.ToString() + ";");
                           //Updates the 'Path' of the target machine.
                           EnvVar.Put();
                       }
                   }
               }
           }

           catch (Exception ex)
           {

           }
       }





Happy Programming ! !
:laugh:




Mohan Ayyavu,
Senior Software Engineer,
Computer Sciences Corporation, Chennai, India

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)