Проблема с возвращением значения 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 шт):

Автор решения: Alexander Petrov

Чтобы писать в файл вместо консоли, достаточно создать 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.

→ Ссылка