我想使用 nssm(非吸盘服务管理器)应用程序能够将 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 服务,然后启动、停止它们、获取它们的状态等?