Проблема с возвращением значения C#
Проблема такая, нужно получить все открытые процессы и записать их в текстовый документ.
Вот мой код:
public static string Processes()
{
object runner = string.Empty;
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"Select Name, CommandLine From Win32_Process");
foreach (ManagementObject instance in searcher.Get())
{
Console.WriteLine("{0}", instance["Name"]);
runner = instance["Name"].ToString();
}
return runner;
}
Ошибка в том, что он не может вернуть переменную runner, так как нельзя преобразовать object в string. Я пробовал так: return runner.ToString(); Это работает, но он записывает только один процесс, так как это строка.
Я пробовал делать это в консоли:
public static void Main(string[] args)
{
ManagementObjectSearcher searcher_soft =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Product");
foreach (ManagementObject queryObj in searcher_soft.Get())
{
Console.WriteLine("<soft> Caption: {0} ; InstallDate: {1}</soft>",
queryObj["Caption"], queryObj["InstallDate"]);
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
В консоли все работает, но нужно в текст.файле, поможете?)
Ответы (1 шт):
Чтобы писать в файл вместо консоли, достаточно создать StreamWriter. У него есть точно такие же методы Write и WriteLine.
using (var writer = new StreamWriter("result.txt"))
using (var searcher = new ManagementObjectSearcher(
"root\\CIMV2", "SELECT * FROM Win32_Product"))
{
foreach (ManagementObject product in searcher.Get())
{
writer.WriteLine("<soft> Caption: {0} ; InstallDate: {1}</soft>",
product["Caption"], product["InstallDate"]);
}
}
Чтобы долго не держать ресурсы, оборачиваем Disposable-объекты в using.
Строка <soft>...</soft> похожа на xml/html. Если вы действительно создаёте xml, то желательно делать это с помощью спец-средств, наподобие XmlWriter или XElement - они автоматически экранируют неразрешённые символы в данных.
И кроме того, правильнее было бы сделать вложенные узлы или атрибуты Caption и InstallDate.