使用NSSM将bat文件作为Windows服务安装并控制它们

时间:2016-07-27 14:30:57

标签: c# batch-file windows-services nssm

我想使用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服务,然后启动,停止它们,获取它们的状态等等。

0 个答案:

没有答案