Подключение к удаленному компьютеру через 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;
}