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

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

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

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

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

textual
Листинг программы
  1. namespace ReadRegistry
  2. {
  3.     public partial class MainForm : Form
  4.     {
  5.         public MainForm()
  6.         {
  7.             InitializeComponent();
  8.         }
  9.  
  10.         private List<string> ReadRemoteRegistryusingWMI(string machineName)
  11.         {
  12.             List<string> programs = new List<string>();
  13.  
  14.             ConnectionOptions connectionOptions = new ConnectionOptions();
  15.             connectionOptions.Username = textBox1.Text;
  16.             connectionOptions.Password = textBox2.Text;
  17.            
  18.  
  19.             //ManagementScope scope = new ManagementScope("\\\\" + machineName + "\\root\\CIMV2", connectionOptions);
  20.             ManagementScope scope = new ManagementScope("\\\\" + machineName + "\\root\\DEFAULT", connectionOptions);
  21.             scope.Connect();
  22.  
  23.             string softwareRegLoc = @"Software\Microsoft\Windows\CurrentVersion\Uninstall";
  24.  
  25.             ManagementClass registry = new ManagementClass(scope, new ManagementPath("StdRegProv"), null);
  26.             ManagementBaseObject inParams = registry.GetMethodParameters("EnumKey");
  27.             inParams["hDefKey"] = 0x80000002;//HKEY_LOCAL_MACHINE
  28.             inParams["sSubKeyName"] = softwareRegLoc;
  29.  
  30.             // Read Registry Key Names
  31.             ManagementBaseObject outParams = registry.InvokeMethod("EnumKey", inParams, null);
  32.             string[] programGuids = outParams["sNames"] as string[];
  33.  
  34.             foreach (string subKeyName in programGuids)
  35.             {
  36.                 inParams = registry.GetMethodParameters("GetStringValue");
  37.                 inParams["hDefKey"] = 0x80000002;//HKEY_LOCAL_MACHINE
  38.                 inParams["sSubKeyName"] = softwareRegLoc + @"\" + subKeyName;
  39.                 inParams["sValueName"] = "DisplayName";
  40.                 // Read Registry Value
  41.                 outParams = registry.InvokeMethod("GetStringValue", inParams, null);
  42.  
  43.                 if (outParams.Properties["sValue"].Value != null)
  44.                 {
  45.                     string softwareName = outParams.Properties["sValue"].Value.ToString();
  46.                     programs.Add(softwareName);
  47.                 }
  48.             }
  49.  
  50.             return programs;
  51.         }
  52.  
  53.         private List<string> ReadMonitorusingWMI(string machineName)
  54.         {
  55.             string sSerial = "";
  56.             string sModel = "";
  57.             //Open the Display Reg-Key
  58.  
  59.             List<string> programs = new List<string>();
  60.  
  61.             ConnectionOptions connectionOptions = new ConnectionOptions();
  62.             connectionOptions.Username = textBox1.Text;
  63.             connectionOptions.Password = textBox2.Text;
  64.            
  65.  
  66.             ManagementScope scope = new ManagementScope("\\\\" + machineName + "\\root\\DEFAULT", connectionOptions);
  67.             scope.Connect();
  68.  
  69.             string softwareRegLoc = @"SYSTEM\CurrentControlSet\Enum\DISPLAY";
  70.  
  71.             ManagementClass registry = new ManagementClass(scope, new ManagementPath("StdRegProv"), null);
  72.             ManagementBaseObject inParams = registry.GetMethodParameters("EnumKey");
  73.             inParams["hDefKey"] = 0x80000002;//HKEY_LOCAL_MACHINE
  74.             inParams["sSubKeyName"] = softwareRegLoc;
  75.  
  76.             // Read Registry Key Names
  77.             ManagementBaseObject outParams = registry.InvokeMethod("EnumKey", inParams, null);
  78.             string[] programGuids = outParams["sNames"] as string[];
  79.  
  80.  
  81.             foreach (string subKeyName in programGuids)
  82.             {
  83.                 inParams = registry.GetMethodParameters("EnumKey");
  84.                 inParams["hDefKey"] = 0x80000002;//HKEY_LOCAL_MACHINE
  85.                 inParams["sSubKeyName"] = softwareRegLoc + @"\" + subKeyName;
  86.  
  87.                 // Read Registry Key Names
  88.                 outParams = registry.InvokeMethod("EnumKey", inParams, null);
  89.                 string[] programGuids2 = outParams["sNames"] as string[];
  90.  
  91.                 foreach (string subKeyNameNext in programGuids2)
  92.                 {
  93.                     inParams = registry.GetMethodParameters("EnumKey");
  94.                     inParams["hDefKey"] = 0x80000002;//HKEY_LOCAL_MACHINE
  95.                     inParams["sSubKeyName"] = softwareRegLoc + @"\" + subKeyName + @"\" + subKeyNameNext;
  96.  
  97.                     // Read Registry Key Names
  98.                     outParams = registry.InvokeMethod("EnumKey", inParams, null);
  99.                     string[] programGuids3 = outParams["sNames"] as string[];
  100.  
  101.                     //Check if Monitor is active
  102.                     if (programGuids3.Contains("Control"))
  103.                     {
  104.                         if (programGuids3.Contains("Device Parameters"))
  105.                         {
  106.                             inParams = registry.GetMethodParameters("GetBinaryValue");
  107.                             inParams["hDefKey"] = 0x80000002;//HKEY_LOCAL_MACHINE
  108.                             inParams["sSubKeyName"] = softwareRegLoc + @"\" + subKeyName + @"\" + subKeyNameNext + @"\" + "Device Parameters";
  109.                             inParams["sValueName"] =  "EDID";
  110.  
  111.                             // Read Registry Binary Value
  112.                             outParams = registry.InvokeMethod("GetBinaryValue", inParams, null);
  113.                             byte[] bObj = outParams["uValue"] as byte[];
  114.  
  115.                             if (bObj != null)
  116.                             {
  117.                                 sSerial = "";
  118.                                 sModel = "";
  119.                                 //Get the 4 Vesa descriptor blocks
  120.                                 string[] sDescriptor = new string[4];
  121.                                 sDescriptor[0] = Encoding.Default.GetString(bObj, 0x48, 18);
  122.                                 sDescriptor[1] = Encoding.Default.GetString(bObj, 0x6C, 18);
  123.  
  124.                                 sSerial = sDescriptor[0].Substring(5).Replace(@"\0\0\0y\0", "").Trim();
  125.                                 sModel = sDescriptor[1].Substring(5).Replace(@"\0\0\0y\0", "").Trim();
  126.                                 rtbox.Text = sSerial;
  127.                                 rtbox2.Text = sModel;
  128.                             }  
  129.                         }
  130.                     }
  131.                 }              
  132.             }
  133.             return programs;
  134.         }

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


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

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

13   голосов , оценка 4.385 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы