Установка bat-файлов в качестве служб Windows с NSSM и управление ими
Я хочу использовать приложение nssm (Non-Sucking Service Manager), чтобы иметь возможность устанавливать bat-файлы в качестве служб Windows, а затем управлять ими. (запуск, остановка, получение статуса и т. д.). Обратите внимание, что я поместил nssm.exe на диск C.
Я проверил свой код, и он работает для простой команды, такой как "ping localhost". Но если я запускаю команды nssm, то это работает странно. Например, если я бегу:
C:\nssm.exe status WindowsServiceName
Тогда это дает мне такой вывод:
S\0E\0R\0V\0I\0C\0E\0_\0S\0T\0O\0P\0P\0E\0D\0\r\0\n\0
На самом деле вывод правильный. Он пишет "SERVICE_STOPPED", но есть много странных символов, и когда я открываю его в Text Visualizer, он показывает только "S".
Если я запускаю эту команду:
C:\nssm.exe start WindowsServiceName
Дает пустой вывод и сервис не запускается. Но если я вручную открываю командную строку и запускаю эти коды, все работает нормально.
Вот мой код:
using System.Diagnostics;
namespace NssmTestApplication
{
class Program
{
static void Main(string[] args)
{
string cmdCommand = @"C:\nssm.exe start WindowsServiceName";
string output = RunCmdCommand(cmdCommand);
}
private static string RunCmdCommand(string cmdCommand)
{
string output = "";
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C " + cmdCommand;
startInfo.Verb = "runas";
startInfo.RedirectStandardOutput = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardError = true;
Process process = Process.Start(startInfo);
while (!process.HasExited)
{
output += process.StandardOutput.ReadToEnd();
}
return output;
}
}
}
Как я могу заставить этот код работать или есть более эффективный способ установки файлов bat в качестве службы Windows, а затем запуска, остановки, получения их статуса и т. Д.?