C# 将参数传递到Windows服务
我想在OnStart期间将2个端口作为参数传递到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
启动服务失败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我现在明白您的意思了。谢谢