我想使用nssm(非吸吮服务管理器)应用程序能够将bat文件安装为Windows服务,然后控制它们。 (开始,停止,获取状态等)。请注意,我将nssm.exe放入C盘。
我测试了我的代码,它适用于像#34; 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服务,然后启动,停止它们,获取它们的状态等等。