Перенаправить вывод процесса C # - PullRequest
1 голос
/ 24 мая 2011

Я работаю над проектом, который будет запрашивать запланированные задачи, выполняемые в других системах.Я написал консольное приложение, которое запускает schtasks и перенаправляет вывод в текстовый файл.Однако мне было интересно, можно ли перенаправить этот вывод в базу данных SQL?

Я думал о написании хранимой процедуры, которая будет обрабатывать все вставки, но я не знаю, что делать сданные внутри консольного приложения.У меня уже есть сохраненный процесс, который перенаправляет XML и текстовые данные в базу данных, которую я создал в прошлом, но я стараюсь, чтобы файлы не располагались повсюду.Вот мой код на тот случай, если кто-нибудь захочет его увидеть:

Process process = new Process();
process.StartInfo.FileName = "C:\\Windows\\System32\\schtasks.exe";
process.StartInfo.Arguments = "/query /s 192.168.0.124";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();

string procOutput = process.StandardOutput.ReadToEnd();

Ниже приведено только перенаправление в текстовый файл с использованием средства записи текста.

Ответы [ 4 ]

1 голос
/ 25 мая 2011

да, это возможно в одной строке, используя for и sqlcmd переменных :

for /F "skip=1 delims=, tokens=1,2,3*" %i in ('schtasks.exe /query /FO CSV /s <server>') do sqlcmd -E -S <dbserver> -d <db> -Q "insert into <table> (TaskName, NextRun, Status) values ('$(TaskName)', '$(NextRun)', '$(Status)');" /v TaskName=%i /v NextRun=%j /v Status=%k

1 голос
/ 24 мая 2011

Я бы написал веб-сервис, который эта маленькая программа вызывает, чтобы публиковать свою информацию.Пусть этот веб-сервис запишет результаты в базу данных и предоставит методы из этой службы для получения информации обратно.Использование набора технологий, с которыми знакомы большинство программистов, упрощает поддержку.Вопрос только в том, как будет выполняться ваше консольное приложение?Стоит ли усилий конвертировать консольное приложение в службу Windows?Пусть он прослушает входящие запросы, чтобы сделать свое дело.WCF очень удобен для решения подобных задач.Как вы думаете?

Целевая страница WCF

Как: разместить службу WCF в управляемой службе Windows

Вам нужно будет поговорить с сетевыми парнями, чтобы убедиться, что ваш веб-сервер может открыть соединение с целевым компьютером, на котором установлена ​​служба wcf.

0 голосов
/ 25 мая 2011

Конечно. Ленивый способ сделать это будет:

  • перенаправить его, как вы делаете сейчас.
  • , когда вы читаете из стандартной ошибки и стандартной ошибки, а не напрямую записываете в текстовый файл, используйте log4net.
  • настроить log4net с приложением SQL для перехвата записанных вами сообщений журнала.
  • если хотите, также настройте приложение для прокрутки файла, чтобы сообщения журнала также записывались в файл журнала.
  • Можно придумать и добавить приложение журнала событий, чтобы стандартная ошибка записывалась в журнал событий, чтобы сотрудники операций могли подключить предупреждение.

Мне нравится использовать log4net таким образом, потому что это упрощает работу с производственными пакетами. Я могу получить нормальный вывод на консоль, в то же время я ловлю его в текстовом файле, базе данных SQL или журнале событий Windows. Делает ребят операции счастливыми (иер).

0 голосов
/ 24 мая 2011

Если программа небольшая, будет работать на доверенной машине, просто используйте SqlConnection (или соединение, эквивалентное вашим rdmbs), чтобы создать команду и выполнить ее, передавая procOutput в качестве параметра). Примерно так:

var connection = new System.Data.SqlClient.SqlConnection(connection);
            var command = connection.CreateCommand();
            command.CommandText = "procedureName";
            command.Parameters.Add(new System.Data.SqlClient.SqlParameter("paramName", "output"));
            command.CommandType = System.Data.CommandType.StoredProcedure;
            command.ExecuteNonQuery();
...