Подключение к удаленному компьютеру через WMI - C#

Узнай цену своей работы

Формулировка задачи:

вот код, который использую:
            ConnectionOptions options = new ConnectionOptions();
            options.Username = "u";
            options.Password = "123";
            scope = new ManagementScope("\\\\PHILKA\\root\\CIMV2", options);
            scope.Connect();
выдает ошибку "отказано в доступе". компы не в домене, если это важно. Што не так?

Решение задачи: «Подключение к удаленному компьютеру через WMI»

textual
Листинг программы
namespace ReadRegistry
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
 
        private List<string> ReadRemoteRegistryusingWMI(string machineName)
        {
            List<string> programs = new List<string>();
 
            ConnectionOptions connectionOptions = new ConnectionOptions();
            connectionOptions.Username = textBox1.Text;
            connectionOptions.Password = textBox2.Text;
           
 
            //ManagementScope scope = new ManagementScope("\\\\" + machineName + "\\root\\CIMV2", connectionOptions);
            ManagementScope scope = new ManagementScope("\\\\" + machineName + "\\root\\DEFAULT", connectionOptions);
            scope.Connect();
 
            string softwareRegLoc = @"Software\Microsoft\Windows\CurrentVersion\Uninstall";
 
            ManagementClass registry = new ManagementClass(scope, new ManagementPath("StdRegProv"), null);
            ManagementBaseObject inParams = registry.GetMethodParameters("EnumKey");
            inParams["hDefKey"] = 0x80000002;//HKEY_LOCAL_MACHINE
            inParams["sSubKeyName"] = softwareRegLoc;
 
            // Read Registry Key Names 
            ManagementBaseObject outParams = registry.InvokeMethod("EnumKey", inParams, null);
            string[] programGuids = outParams["sNames"] as string[];
 
            foreach (string subKeyName in programGuids)
            {
                inParams = registry.GetMethodParameters("GetStringValue");
                inParams["hDefKey"] = 0x80000002;//HKEY_LOCAL_MACHINE
                inParams["sSubKeyName"] = softwareRegLoc + @"\" + subKeyName;
                inParams["sValueName"] = "DisplayName";
                // Read Registry Value 
                outParams = registry.InvokeMethod("GetStringValue", inParams, null);
 
                if (outParams.Properties["sValue"].Value != null)
                {
                    string softwareName = outParams.Properties["sValue"].Value.ToString();
                    programs.Add(softwareName);
                }
            }
 
            return programs;
        }
 
        private List<string> ReadMonitorusingWMI(string machineName)
        {
            string sSerial = "";
            string sModel = "";
            //Open the Display Reg-Key
 
            List<string> programs = new List<string>();
 
            ConnectionOptions connectionOptions = new ConnectionOptions();
            connectionOptions.Username = textBox1.Text;
            connectionOptions.Password = textBox2.Text;
           
 
            ManagementScope scope = new ManagementScope("\\\\" + machineName + "\\root\\DEFAULT", connectionOptions);
            scope.Connect();
 
            string softwareRegLoc = @"SYSTEM\CurrentControlSet\Enum\DISPLAY";
 
            ManagementClass registry = new ManagementClass(scope, new ManagementPath("StdRegProv"), null);
            ManagementBaseObject inParams = registry.GetMethodParameters("EnumKey");
            inParams["hDefKey"] = 0x80000002;//HKEY_LOCAL_MACHINE
            inParams["sSubKeyName"] = softwareRegLoc;
 
            // Read Registry Key Names 
            ManagementBaseObject outParams = registry.InvokeMethod("EnumKey", inParams, null);
            string[] programGuids = outParams["sNames"] as string[];
 
 
            foreach (string subKeyName in programGuids)
            {
                inParams = registry.GetMethodParameters("EnumKey");
                inParams["hDefKey"] = 0x80000002;//HKEY_LOCAL_MACHINE
                inParams["sSubKeyName"] = softwareRegLoc + @"\" + subKeyName;
 
                // Read Registry Key Names 
                outParams = registry.InvokeMethod("EnumKey", inParams, null);
                string[] programGuids2 = outParams["sNames"] as string[];
 
                foreach (string subKeyNameNext in programGuids2)
                {
                    inParams = registry.GetMethodParameters("EnumKey");
                    inParams["hDefKey"] = 0x80000002;//HKEY_LOCAL_MACHINE
                    inParams["sSubKeyName"] = softwareRegLoc + @"\" + subKeyName + @"\" + subKeyNameNext;
 
                    // Read Registry Key Names
                    outParams = registry.InvokeMethod("EnumKey", inParams, null);
                    string[] programGuids3 = outParams["sNames"] as string[];
 
                    //Check if Monitor is active
                    if (programGuids3.Contains("Control"))
                    {
                        if (programGuids3.Contains("Device Parameters"))
                        {
                            inParams = registry.GetMethodParameters("GetBinaryValue");
                            inParams["hDefKey"] = 0x80000002;//HKEY_LOCAL_MACHINE
                            inParams["sSubKeyName"] = softwareRegLoc + @"\" + subKeyName + @"\" + subKeyNameNext + @"\" + "Device Parameters";
                            inParams["sValueName"] =  "EDID";
 
                            // Read Registry Binary Value
                            outParams = registry.InvokeMethod("GetBinaryValue", inParams, null);
                            byte[] bObj = outParams["uValue"] as byte[];
 
                            if (bObj != null)
                            {
                                sSerial = "";
                                sModel = "";
                                //Get the 4 Vesa descriptor blocks
                                string[] sDescriptor = new string[4];
                                sDescriptor[0] = Encoding.Default.GetString(bObj, 0x48, 18);
                                sDescriptor[1] = Encoding.Default.GetString(bObj, 0x6C, 18);
 
                                sSerial = sDescriptor[0].Substring(5).Replace(@"\0\0\0y\0", "").Trim();
                                sModel = sDescriptor[1].Substring(5).Replace(@"\0\0\0y\0", "").Trim();
                                rtbox.Text = sSerial;
                                rtbox2.Text = sModel;
                            }   
                        }
                    }
                }              
            }
            return programs;
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.385 из 5
Похожие ответы