C# 将参数传递到Windows服务

C# 将参数传递到Windows服务,c#,windows-services,C#,Windows Services,我想在OnStart期间将2个端口作为参数传递到Windows服务中。我看到了一些例子,并偶然发现了这本指南。当我传递一个参数时,此代码正常工作,但当我尝试传递两个参数时,出现错误启动服务失败1053。代码如下 namespace MyService { static class Program { static void Main(string[] args) { uint port = uint.Parse(args

我想在OnStart期间将2个端口作为参数传递到Windows服务中。我看到了一些例子,并偶然发现了这本指南。当我传递一个参数时,此代码正常工作,但当我尝试传递两个参数时,出现错误
启动服务失败1053
。代码如下

namespace MyService  
{
    static class Program
    {
        static void Main(string[] args)
        {
            uint port = uint.Parse(args[1]);
            uint port2 = uint.Parse(args[2]);

            ServiceBase[] ServicesToRun;        
            ServicesToRun = new ServiceBase[] 
            { 
                new MyService(port,port2);
            };
            ServiceBase.Run(ServicesToRun);
        }
    }
}
下面的代码是我的服务代码

namespace MyService  
{
    public partial class MyService : ServiceBase
    {
        public uint Port { get; set; }
        public uint Port2 { get; set; }

        public MyService(uint port, uint port2)
        {
            InitializeComponent();
            Port = port;
            Port2 = port2;
        }

        protected override void OnStart(string[] args)
        {
            if(args.Length > 0) {
                Port = uint.Parse(args[1]);
                Port2 = uint.Parse(args[2]);
            }

            // DO STUFF
        }
    }
}
我使用以下命令安装了它

sc create WindowsService1 binPath= "C:\Users\user\Desktop\abc\Projects\WindowsService1\bin\x86\Debug\WindowsService1.exe --port 3000 --port 2000"
并开始使用以下命令

sc start WindowsService1 --port 3000 --port 2000

我可以想象,当您调用
uint.Parse(“--port”)
时,您会遇到一个异常。我认为这没有问题,因为当我只使用1个端口时,我仍然调用
--port 3000
,现在我试图在后面添加
--port 2000
。这是因为
args[1]
是第二个参数,即
3000
,但是
args[2]
是第三个参数,也就是说,它是
--port
。Harry已经发现了这个问题。您的解析代码错误,因为您没有考虑删除
--port
开关。如果您不相信我们,请添加一些调试代码,将参数输出到一个文件中,然后查看您实际接收并试图解析的内容。@HarryJohnston我现在明白您的意思了。谢谢。我想当你调用
uint.Parse(“--port”)
时,你会遇到一个异常。我不认为这有什么问题,因为当我只使用一个端口时,我仍然调用
--port 3000
,现在我试图在后面添加
--port 2000
。这是因为
args[1]
是第二个参数,即
3000
,但是
args[2]
是第三个参数,也就是说,它是
--port
。Harry已经发现了这个问题。您的解析代码错误,因为您没有考虑删除
--port
开关。如果您不相信我们,请添加一些调试代码,将参数输出到一个文件中,然后查看您实际接收并试图解析的内容。@HarryJohnston我现在明白您的意思了。谢谢