Я могу просматривать удаленно подключенный компьютер из этой статьи:Удаленный рабочий стол с помощью c-net . но мне это не нужно. Мне просто нужно подключиться к этому компьютеру и получить данные о свободном пространстве диска C. Как я мог это сделать? Я могу подключиться к удаленному рабочему столу. Я могу получить driveInfo, используя пространство имен IO. а как их совместить?
Получение информации о диске с удаленного компьютера
comment
Зачем использовать клиент удаленного рабочего стола, если вам не нужен удаленный рабочий стол? Я бы посоветовал посмотреть на WMI для этого - см. этот вопрос, как это сделать.
- person Bridge   schedule 21.01.2013
Ответы (3)
Используйте пространство имен System.Management
и Win32_Volume
класс WMI для этого. Вы можете запросить экземпляр с DriveLetter
из C:
и получить его свойство FreeSpace
следующим образом:
ManagementPath path = new ManagementPath() {
NamespacePath = @"root\cimv2",
Server = "<REMOTE HOST OR IP>"
};
ManagementScope scope = new ManagementScope(path);
string condition = "DriveLetter = 'C:'";
string[] selectedProperties = new string[] { "FreeSpace" };
SelectQuery query = new SelectQuery("Win32_Volume", condition, selectedProperties);
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
using (ManagementObjectCollection results = searcher.Get())
{
ManagementObject volume = results.Cast<ManagementObject>().SingleOrDefault();
if (volume != null)
{
ulong freeSpace = (ulong) volume.GetPropertyValue("FreeSpace");
// Use freeSpace here...
}
}
Существует также свойство Capacity
, в котором хранится общий размер тома.
person
Lance U. Matthews
schedule
21.01.2013
Разве мне не нужно проходить аутентификацию в пути?
- person ; 21.01.2013
Это зависит от вашего окружения. Учетные данные и другие параметры безопасности можно задать с помощью
scope.Options
свойства. , который является экземпляром класса ConnectionOptions
.
- person Lance U. Matthews; 21.01.2013
Что такое свободное пространство? Это в бите?
- person Si8; 08.09.2017
Я узнал, что это в байтах. но информация не точная. Например, на диске C: на сервере свободно 56,5 ГБ, но код показывает мне 62 ГБ.
- person Si8; 08.09.2017
@ Si8 Откуда вы берете точное количество свободного места? Проводник Виндоус? Вы рассчитываете свободные гигабайты, используя
freeSpace / 1024 / 1024 / 1024
или, я полагаю, freeSpace / 1000 / 1000 / 1000
?
- person Lance U. Matthews; 08.09.2017
Да... Я +1, потому что я использовал конвертер Google, он работал неправильно, но когда я применил правильные вычисления, он сработал. Спасибо.
- person Si8; 08.09.2017
Вы можете собирать информацию об удаленном компьютере с помощью WMI, но для этого требуется, чтобы на удаленном компьютере был запущен RPC.
Пожалуйста, взгляните на эти ссылки: http://www.codeproject.com/Articles/8804/Collecting-Remote-System-Information-With-WMI и http://blogs.msdn.com/b/securitytools/archive/2009/07/29/wmi-programming-using-c-net.aspx
person
Juliano Nunes Silva Oliveira
schedule
21.01.2013
Вот эквивалент vb.net на случай, если вам понадобится его перевести.
Dim path = New ManagementPath With {.NamespacePath = "root\cimv2",
.Server = "<REMOTE HOST OR IP>"}
Dim scope = New ManagementScope(path)
Dim condition = "DriveLetter = 'C:'"
Dim selectedProperties = {"FreeSpace"}
Dim query = New SelectQuery("Win32_Volume", condition, selectedProperties)
Dim searcher = New ManagementObjectSearcher(scope, query)
Dim results = searcher.Get()
Dim volume = results.Cast(Of ManagementObject).SingleOrDefault()
If volume IsNot Nothing Then
Dim freeSpace As ULong = volume.GetPropertyValue("FreeSpace")
End If
person
Alessandro Bernardi
schedule
27.07.2015