Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 9

Удалённый доступ WMI на языке C#

15.04.2014, 11:08. Показов 5043. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня такой вопрос. Как правильно реализовать удалённый доступ WMI на C#? Использовал учебник Климова - "C# советы программистам". На локальном компьютере работает, удалённо - нет. Воспользовался WMI Code Creator v1.0 с официального сайта MS - http://www.microsoft.com/en-us... px?id=8572
Вот код, который он мне выдал:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Management;
 
namespace WMISample
{
    public class MyQuerySample : System.Windows.Forms.Form
    {
        private System.Windows.Forms.Label userNameLabel;
        private System.Windows.Forms.TextBox userNameBox;
        private System.Windows.Forms.TextBox passwordBox;
        private System.Windows.Forms.Label passwordLabel;
        private System.Windows.Forms.Button OKButton;
        private System.Windows.Forms.Button cancelButton;
        
        private System.ComponentModel.Container components = null;
 
        public MyQuerySample()
        {
            InitializeComponent();
        }
 
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }
 
        private void InitializeComponent()
        {
            this.userNameLabel = new System.Windows.Forms.Label();
            this.userNameBox = new System.Windows.Forms.TextBox();
            this.passwordBox = new System.Windows.Forms.TextBox();
            this.passwordLabel = new System.Windows.Forms.Label();
            this.OKButton = new System.Windows.Forms.Button();
            this.cancelButton = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // userNameLabel
            // 
            this.userNameLabel.Location = new System.Drawing.Point(16, 8);
            this.userNameLabel.Name = "userNameLabel";
            this.userNameLabel.Size = new System.Drawing.Size(160, 32);
            this.userNameLabel.TabIndex = 0;
            this.userNameLabel.Text = "Enter the user name for the remote computer:";
            // 
            // userNameBox
            // 
            this.userNameBox.Location = new System.Drawing.Point(160, 16);
            this.userNameBox.Name = "userNameBox";
            this.userNameBox.Size = new System.Drawing.Size(192, 20);
            this.userNameBox.TabIndex = 1;
            this.userNameBox.Text = "";
            // 
            // passwordBox
            // 
            this.passwordBox.Location = new System.Drawing.Point(160, 48);
            this.passwordBox.Name = "passwordBox";
            this.passwordBox.PasswordChar = '*';
            this.passwordBox.Size = new System.Drawing.Size(192, 20);
            this.passwordBox.TabIndex = 3;
            this.passwordBox.Text = "";
            // 
            // passwordLabel
            // 
            this.passwordLabel.Location = new System.Drawing.Point(16, 48);
            this.passwordLabel.Name = "passwordLabel";
            this.passwordLabel.Size = new System.Drawing.Size(160, 32);
            this.passwordLabel.TabIndex = 2;
            this.passwordLabel.Text = "Enter the password for the remote computer:";
            // 
            // OKButton
            // 
            this.OKButton.Location = new System.Drawing.Point(40, 88);
            this.OKButton.Name = "OKButton";
            this.OKButton.Size = new System.Drawing.Size(128, 23);
            this.OKButton.TabIndex = 4;
            this.OKButton.Text = "OK";
            this.OKButton.Click += new System.EventHandler(this.OKButton_Click);
            // 
            // cancelButton
            // 
            this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
            this.cancelButton.Location = new System.Drawing.Point(200, 88);
            this.cancelButton.Name = "cancelButton";
            this.cancelButton.Size = new System.Drawing.Size(128, 23);
            this.cancelButton.TabIndex = 5;
            this.cancelButton.Text = "Cancel";
            this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
            // 
            // MyQuerySample
            // 
            this.AcceptButton = this.OKButton;
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.CancelButton = this.cancelButton;
            this.ClientSize = new System.Drawing.Size(368, 130);
            this.ControlBox = false;
            this.Controls.Add(this.cancelButton);
            this.Controls.Add(this.OKButton);
            this.Controls.Add(this.passwordBox);
            this.Controls.Add(this.passwordLabel);
            this.Controls.Add(this.userNameBox);
            this.Controls.Add(this.userNameLabel);
            this.Name = "MyQuerySample";
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.Text = "Remote Connection";
            this.ResumeLayout(false);
 
        }
 
        [STAThread]
        static void Main() 
        {
            Application.Run(new MyQuerySample());
        }
 
        private void OKButton_Click(object sender, System.EventArgs e)
        {
            try
            {
                ConnectionOptions connection = new ConnectionOptions();
                connection.Username = userNameBox.Text;
                connection.Password = passwordBox.Text;
                connection.Authority = "ntlmdomain:DOMAIN";
 
                ManagementScope scope = new ManagementScope(
                    "\\\\FullComputerName\\root\\CIMV2", connection);
                scope.Connect();
 
                ObjectQuery query= new ObjectQuery(
                    "SELECT * FROM Win32_Processor"); 
 
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher(scope, query);
 
                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Win32_Processor instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Name: {0}", queryObj["Name"]);
                }
                Close();
            }
            catch(ManagementException err)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + err.Message);
            }
            catch(System.UnauthorizedAccessException unauthorizedErr)
            {
                MessageBox.Show("Connection error (user name or password might be incorrect): " + unauthorizedErr.Message);
            }
        }
 
        private void cancelButton_Click(object sender, System.EventArgs e)
        {
            Close();
        }
    }
}
Для компьютера с именем FullComputerName и доменом DOMAIN. И опять не работает! Ошибка: "Отказано в доступе HRESULT:0 80070005 (E_ACCESSDENIED)". В чём проблема: нужно как-то настроить систему для WMI или всё-таки неправильный код? Буду очень благодарен за помощь в этом вопросе.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.04.2014, 11:08
Ответы с готовыми решениями:

Удалённый доступ и копирование
Здравствуйте. У меня такая проблема, есть локальная сеть, а в ней пк в котором я знаю(домен,пароль, имя пользователя, IP), мне надо с...

C#+WMI+Удаленный доступ
Имеется одноранговая сеть, т.е соединены 2 компа между собой. На обоих компах есть локальные учетки администраторов(Их я и использую при...

Удалённый доступ
Добрый день. Имеется microsoft visual c# 2010 и sql server 2008 express. Задача состоит в написании приложения которое будет...

8
5 / 5 / 1
Регистрация: 05.11.2013
Сообщений: 58
15.04.2014, 15:11
Accessdenied указывает на невозможность идентифицироваться на удаленной машине и создать WMI object. Попробуйте из командной строки с теми же учетными данными запустить сессию net use для удаленного компьютера. Если проходите аутентификацию - смотрите настройки безопасности COM/DCOM на удаленном сервере.
0
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 9
17.04.2014, 20:18  [ТС]
Mif, я не специалист по сетям и не совсем понял, что вы имеете в виду под "запустить сессию net use для удаленного компьютера".
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
17.04.2014, 21:32
на удаленном компе у вас должны быть какие-то разрешения, если их нет, естественно он откажет в доступе...
А авторизоваться вы пытаетесь в домене DOMAIN...
то есть как минимум должен быть пользователь userNameBox.Text@DOMAIN, которого, я подозреваю просто нет...
0
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 9
18.04.2014, 12:21  [ТС]
xoraxax, меня как раз и интересует, какие именно разрешения нужны, как нужно настроить учётную запись администратора или пользователя, чтобы удалённо получить данные WMI, если предположить что код, выданный WMI Code Creator v1.0 - правильный.
Эта программа, с некоторыми изменениями, испытывалась в сети.
Вот код изменённой программы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Management;
 
 
namespace CodeCreators_Remote_WMI
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
 
            InitializeComponent();
            
        }
        
        void GetCPUNameButtonClick(object sender, EventArgs e)
        {
            try
            {
                ManagementScope scope;
                if(localCompCheckBox.Checked)
                {
                    scope = new ManagementScope("\\\\localhost\\root\\CIMV2");
                }
                else
                {
                    ConnectionOptions connection = new ConnectionOptions();
                    connection.Username = usernameTextBox.Text;
                    connection.Password = passwordTextBox.Text;
                    connection.Authority = "ntlmdomain:" + domainTextBox.Text;
                    scope = new ManagementScope(
                    "\\\\" + fullCompNameTextBox.Text + "\\root\\CIMV2", connection);
                }
                scope.Connect();
                ObjectQuery query= new ObjectQuery("SELECT * FROM Win32_Processor"); 
 
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher(scope, query);
 
                foreach (ManagementObject queryObj in searcher.Get())
                {
                    CPUsNameLabel.Text = "CPU's Name:\n" + queryObj["Name"].ToString();
                }
 
            }
            catch(ManagementException err)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + err.Message);
            }
            catch(System.UnauthorizedAccessException unauthorizedErr)
            {
                MessageBox.Show("Connection error (user name or password might be incorrect): " + unauthorizedErr.Message);
            }
        }
        
        void LocalCompCheckBoxCheckedChanged(object sender, EventArgs e)
        {
            usernameTextBox.Enabled = ! localCompCheckBox.Checked;
            passwordTextBox.Enabled = ! localCompCheckBox.Checked;
            domainTextBox.Enabled = ! localCompCheckBox.Checked;
            fullCompNameTextBox.Enabled = ! localCompCheckBox.Checked;
        }
    }
}
xoraxax, как можете заметить, здесь domainTextBox - как раз для ввода домена.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
18.04.2014, 15:29
вот http://samag.ru/archive/article/620 может это поможет...
0
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 9
18.04.2014, 18:23  [ТС]
xoraxax, Спасибо, может быть.
0
5 / 5 / 1
Регистрация: 05.11.2013
Сообщений: 58
21.04.2014, 09:06
Я бы начал с того, что проверил коннект под домен-админом, если есть возможность. Эта группа гарантированно входит в группу локальных администраторов на рабочих станциях.
Что касается net use, то вот
0
0 / 0 / 0
Регистрация: 17.02.2014
Сообщений: 9
21.04.2014, 19:06  [ТС]
Mif, спасибо, попытаюсь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.04.2014, 19:06
Помогаю со студенческими работами здесь

Удалённый доступ к файлам через интернет
Захотелось мне попрактиковаться в создании удалённого доступа через интернет. Удалёнку по локалке я уже делал, но не знаю как настроить её...

Атрибуты SMART через запрос WMI на языке C#
Здравствуйте, передо мной возникла задача: написание программы, которая оценивает техническое состояние жёсткого диска. Я выяснил, что это...

Удалённый доступ
Здравствуйте. Работаю программистом, у нас на работе корпоративная сеть, мой коллега как-то заходит удалённо на мой компьютер, может делать...

Удалённый доступ
Здравствуйте у меня есть программа написана на с++ , хотел бы создать приложение для удаленного доступа в программу можно ли это...

Удалённый доступ
Ребят помогите найти программу удалённого доступа которая не будет отображаться, то есть поставил её на комп пользователь сел и не видит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru