【问题标题】:How to pass parameters to Windows Service?如何将参数传递给 Windows 服务?
【发布时间】:2023-03-14 17:30:02
【问题描述】:

我尝试将参数传递给 Windows 服务。

这是我的代码 sn-p:

class Program : ServiceBase
{
    public String UserName { get; set; }
    public String Password { get; set; }

    static void Main(string[] args)
    {
        ServiceBase.Run(new Program());
    }

    public Program()
    {
        this.ServiceName = "Create Users Service";
    }

    protected override void OnStart(string[] args)
    {
        base.OnStart(args);

        String User = UserName;
        String Pass = Password;
        try
        {
            DirectoryEntry AD = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer");

            DirectoryEntry NewUser = AD.Children.Add(User, "user");
            NewUser.Invoke("SetPassword", new object[] { Pass });
            NewUser.Invoke("Put", new object[] { "Description", "Test User from .NET" });
            NewUser.CommitChanges();
            DirectoryEntry grp;
            grp = AD.Children.Find("Administrators", "group");
            if (grp != null)
            {
                grp.Invoke("Add", new object[] { NewUser.Path.ToString() });
            }
            Console.WriteLine("Account Created Successfully");
            Console.ReadLine();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            Console.ReadLine();
        } 
    }

如何将用户名和密码传递给此 Windows 服务?

【问题讨论】:

  • 如何将用户名和密码传递给这个 windows 服务?

标签: c# windows-services


【解决方案1】:

你可以像这样在启动时传递参数:

  1. 右键单击 MyComputer 并选择管理 -> 服务和应用程序 -> 服务
  2. 右键单击您的服务,选择“属性”,然后您应该会在“常规”选项卡下看到“启动参数”框。

如果您在那里输入例如User Password,您将在protected override void OnStart(string[] args) 中获得这些参数作为args。 然后像这样使用它:

protected override void OnStart(string[] args)
{
    base.OnStart(args);
    UserName = args[0];
    Password = args[1];
    //do everything else
}

【讨论】:

  • 从 win7 开始(至少)这仅适用于设置从“属性”对话框启动服务时要使用的参数
  • @MartinSerrano 嗨。抱歉没明白你的意思
  • 该对话框仅允许您设置这些参数以启动服务一次。要使其永久化,您必须在此处的第二个答案中执行类似操作:stackoverflow.com/questions/2243753/…
【解决方案2】:

您将不得不从外部来源加载这些值。最简单的方法是使用配置管理器直接从 app.config 文件加载它们。像这样的东西:http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx

【讨论】:

    【解决方案3】:

    您可以使用配置文件注册表或任何类型的数据库

    【讨论】:

    • @Avada >>form 我在哪里可以接受答案????我尝试这样做,但没有找到接受答案的复选框!!!从哪里???请告诉我
    【解决方案4】:

    使用 Environment.GetCommandLineArgs()

    【讨论】:

      【解决方案5】:

      你可以在启动windows服务时传递参数。 以管理员权限运行 cmd 并输入以下命令:

      sc start <ServiceName> param1 param2
      

      如果您想永远使用它一次,您可以将参数存储到文件或 app.config 中。

      【讨论】:

        【解决方案6】:

        在运行时将参数(不使用注册表、文件或数据库)传递给 Windows 服务的两种最简洁的方法是使用命名管道或在 Windows 中设置 WCF 服务,您的客户端将调用该服务。默认情况下,Windows 服务是一个重复运行的进程。

        如果您使用 WCF,请在添加删除程序(或 Windows 7 的程序和功能)中将其打开。

        命名管道:

        https://msdn.microsoft.com/en-us/library/aa365590(v=vs.85).aspx

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-08-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多