Comments 43
Спасибо. Коротко, ясно и есть над чем поразвлекаться дальше.
Да, WMI - это сила :)
Несколько лет назад писал прототипчик программы, которая собирает конфигурации компов по сети, когда стал вопрос об инвентаризации у наших админов. Потом все похерили, не знаю провели ли инвентаризацию полную до сих пор :)
Спасибо за статью!
Несколько лет назад писал прототипчик программы, которая собирает конфигурации компов по сети, когда стал вопрос об инвентаризации у наших админов. Потом все похерили, не знаю провели ли инвентаризацию полную до сих пор :)
Спасибо за статью!
Советую указать в статье, что код на с# и его выделить, например курсивом.
мне понравился синтаксис c# :)
теперь желание его изучить летом возросло.
теперь желание его изучить летом возросло.
исправьте: "получить информацию о логических дисках".
за статью спасибо.
за статью спасибо.
Я вот таким образом решил проблему(правда мне нужны были только имена).
Причем без явного указания имени машины (oScope = new System.Management.ManagementScope(@"\\" + Environment.MachineName + @"\root\cimv2");) выдавал всегда пустой результат
public List<string> getMetrics(string strClass)
{
List<string> ret = new List<string>();
System.Management.ObjectQuery oQuery;
System.Management.ManagementScope oScope;
System.Management.ManagementObjectSearcher oSearcher;
string strSQL;
int I = 0;
try
{
strSQL = "Select * from " + strClass;
oQuery = new System.Management.ObjectQuery(strSQL);
oScope = new System.Management.ManagementScope(@"\\" + Environment.MachineName + @"\root\cimv2");
oSearcher = new System.Management.ManagementObjectSearcher(oScope, oQuery);
foreach (System.Management.ManagementObject oService in oSearcher.Get())
{
log(oService.GetPropertyValue("Name").ToString());
ret.Add(oService.GetPropertyValue("Name").ToString());
}
}
catch (Exception ex)
{
log("getMetrics "+ex.Message);
}
return ret;
}
Причем без явного указания имени машины (oScope = new System.Management.ManagementScope(@"\\" + Environment.MachineName + @"\root\cimv2");) выдавал всегда пустой результат
public List<string> getMetrics(string strClass)
{
List<string> ret = new List<string>();
System.Management.ObjectQuery oQuery;
System.Management.ManagementScope oScope;
System.Management.ManagementObjectSearcher oSearcher;
string strSQL;
int I = 0;
try
{
strSQL = "Select * from " + strClass;
oQuery = new System.Management.ObjectQuery(strSQL);
oScope = new System.Management.ManagementScope(@"\\" + Environment.MachineName + @"\root\cimv2");
oSearcher = new System.Management.ManagementObjectSearcher(oScope, oQuery);
foreach (System.Management.ManagementObject oService in oSearcher.Get())
{
log(oService.GetPropertyValue("Name").ToString());
ret.Add(oService.GetPropertyValue("Name").ToString());
}
}
catch (Exception ex)
{
log("getMetrics "+ex.Message);
}
return ret;
}
Сандра также была полезна тем, что подробно описывала характеристики, режимы работы железа и программных компонентов, а также позволяла провести "быстрое" тестирование оборудования и сравнение его характеристик с существующими аналогами.
Существует ли инструментарий, подобно указанному в статье, позволяющий на C# "малой кровью" реализовать получение информации о RAM, температуре на датчиках (процессор, чип видеокарты, чипсет)в системе?
Существует ли инструментарий, подобно указанному в статье, позволяющий на C# "малой кровью" реализовать получение информации о RAM, температуре на датчиках (процессор, чип видеокарты, чипсет)в системе?
Да, могу сказать еще одно: у меня в паре проектов WMI-запросы вызывали утечку памяти. Проблема в том, что работа с WMI строится через COM.
Надо смотреть. В любом случае GC должен был бы все за собой убрать. Вряд ли MS не решил эту проблему.
Не должен, ибо память аллоцируется вне досягаемости GC, не в managed heap. Поверьте, любая работа с native-функциями и вызов COM-объектов может вести к утечкам памяти.
Проверяется это сложно, нужно пару суток гонять программу и смотреть на оснастку Performance ;)
Проверяется это сложно, нужно пару суток гонять программу и смотреть на оснастку Performance ;)
Да, вы правы, просто перепутал, я для своих неуправляемых библиотек всегда .NET обертку делал.
Забавно, забавно. Ждём продолжения автора на эту же тему, но под WINAPI?
Что вы хотели сказать? Я не совсем понял.
Хотел сказать, что интересно было бы взглянуть, как это делается не на шарпе, а, к примеру, на C++ без FCL.
в С++ увы не силен но может быть эта ссылка вам поможет.
что касается архитектуры проца то примерно так
void DefineSystemInfo(char* p_systemInfo)
{
SYSTEM_INFO si;
GetSystemInfo(&si);
switch(si.wProcessorArchitecture)
{
case PROCESSOR_ARCHITECTURE_UNKNOWN:
strcpy(p_systemInfo,"UNKNOWN");
break;
case PROCESSOR_ARCHITECTURE_INTEL:
strcpy(p_systemInfo,"INTEL");
break;
case PROCESSOR_ARCHITECTURE_IA64:
strcpy(p_systemInfo,"IA_64");
break;
case PROCESSOR_ARCHITECTURE_AMD64:
strcpy(p_systemInfo,"AMD64");
break;
default:break;
}
}
void DefineSystemInfo(char* p_systemInfo)
{
SYSTEM_INFO si;
GetSystemInfo(&si);
switch(si.wProcessorArchitecture)
{
case PROCESSOR_ARCHITECTURE_UNKNOWN:
strcpy(p_systemInfo,"UNKNOWN");
break;
case PROCESSOR_ARCHITECTURE_INTEL:
strcpy(p_systemInfo,"INTEL");
break;
case PROCESSOR_ARCHITECTURE_IA64:
strcpy(p_systemInfo,"IA_64");
break;
case PROCESSOR_ARCHITECTURE_AMD64:
strcpy(p_systemInfo,"AMD64");
break;
default:break;
}
}
Не совсем WMI, но есть хорошая программа работающая из коммандной строки checkcfg http://checkcfg.narod.ru/, бесплатная, можно использовать в своих разработках, собирает конфигурацию компьютера и отдает в txt или в csv, может на ftp положить при желании.
Посоветовал бы еще использовать Power Shell - консоль от MS с языком сценариев, предназначена для автоматизации задач по администрированию системы. В сценариях можно использовать сборки .NET + существует большое количество готовых решений (скриптов).
а вот, например, скрипт для решения описанной задачи http://thepowershellguy.com/blogs/posh/a…
а вот, например, скрипт для решения описанной задачи http://thepowershellguy.com/blogs/posh/a…
Портированная Samba на Linux :)
#!/bin/sh
echo "Local time:"
echo "-----------"
date
echo
echo "CPU:"
echo "----"
cat /proc/cpuinfo
echo
echo "HDD Usage:"
echo "----------"
df -h
echo
echo "Devices:"
echo "--------"
lspci -v
echo
echo "HDD/CDR devices:"
echo "----------------"
/sbin/blkid
echo
echo "USB Devices:"
echo "------------"
lsusb -v
echo
echo "Sound devices:"
echo "--------------"
amixer
echo
echo "Memory Usage:"
echo "-------------"
free
echo
echo "Advanced Memory Usage:"
echo "----------------------"
cat /proc/meminfo
echo
echo "Network interfaces:"
echo "-------------------"
/sbin/ifconfig
echo
echo "Screen info:"
echo "------------"
xwininfo -root
echo
#!/bin/sh
echo "Local time:"
echo "-----------"
date
echo
echo "CPU:"
echo "----"
cat /proc/cpuinfo
echo
echo "HDD Usage:"
echo "----------"
df -h
echo
echo "Devices:"
echo "--------"
lspci -v
echo
echo "HDD/CDR devices:"
echo "----------------"
/sbin/blkid
echo
echo "USB Devices:"
echo "------------"
lsusb -v
echo
echo "Sound devices:"
echo "--------------"
amixer
echo
echo "Memory Usage:"
echo "-------------"
free
echo
echo "Advanced Memory Usage:"
echo "----------------------"
cat /proc/meminfo
echo
echo "Network interfaces:"
echo "-------------------"
/sbin/ifconfig
echo
echo "Screen info:"
echo "------------"
xwininfo -root
echo
Везет вам( Я бы написал пару статеек на тему написания программ для Singularity.
public static void PrintProcessorStat()
{
String map[] = { "Name", "Caption", "Description", "L2CacheSize", \
"Manufacturer", "Revision" };
String sql = "select ";
for(int i=0; i < map.length(); i++) {
if(i > 0) sql += ",";
sql += map[i] + " ";
}
sql += "from Win32_Processor where ProcessorType = 3";
...
foreach (ManagementObject ProcessorInfo in ProcessorCollection) {
Console.WriteLine("Информация о процессоре;");
for(int i = 0; i < map.length(); i++) {
Console.WriteLine(map[i] + ProcessorInfo[map[i]].ToString());
}
}
}
{
String map[] = { "Name", "Caption", "Description", "L2CacheSize", \
"Manufacturer", "Revision" };
String sql = "select ";
for(int i=0; i < map.length(); i++) {
if(i > 0) sql += ",";
sql += map[i] + " ";
}
sql += "from Win32_Processor where ProcessorType = 3";
...
foreach (ManagementObject ProcessorInfo in ProcessorCollection) {
Console.WriteLine("Информация о процессоре;");
for(int i = 0; i < map.length(); i++) {
Console.WriteLine(map[i] + ProcessorInfo[map[i]].ToString());
}
}
}
тьфу..подумал тут про тесты будет рассказываться (ну мне лично этим Сисандра запомнилась)
Но всё равно интересненько
Но всё равно интересненько
Sign up to leave a comment.
SiSoft Sandra своими руками