1

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

4

0 回答 0