Topshelf - 如何在安装服务之前修改Password命令行参数

时间:2015-03-03 05:44:07

标签: c# topshelf

我想通过命令行安装我的服务并指定加密密码,例如

MyService.exe install -servicename "MyService" -username "MyPC\MyServiceUser" -password "0D689361D6D7DC4E"

我试图修改构造函数中的密码参数

public class MyService: ServiceControl
{
  public static int Main(string[] args)
  {
    DecodePasswords(args);
    var host = HostFactory.New(x =>
    {
      x.Service<MyService>(hostSettings => new MyService(hostSettings));
    }); 
    return OkStatuses.Contains(exitCode) ? 0 : (int)exitCode;
  }

  private static bool IsInstalling(string[] args)
  {
      return (args.Length > 2) && (args[0].ToUpper() == "INSTALL");
  }

  private static void DecodePasswords(string[] args)
  {
      if (IsInstalling(args))
      {
          var encryptedPassword = string.Empty;
          for (int i = 1; i < args.Length; i++)
          {
              var arg = args[i].Trim().ToUpper();
              if (arg == "-PASSWORD" && ((i + 1 < args.Length)))
              {
                  encryptedPassword = args[i + 1];
                  try
                  {
                      args[i + 1] = DecodePassword(encryptedPassword);
                      Console.WriteLine(args[i + 1]); //TODO TEMP
                  }
                  catch
                  {
                      //ignore
                      break;
                  }
                  break;
              }
          }
      }
  }
}

我检查了参数并解码了密码并且它们是正确的,但是当我启动该服务时会发生以下错误:

  

由于以下错误,MyService服务无法启动:   由于登录失败,服务未启动。

     

MyService服务无法使用当前的。\ MyServiceUser登录   由于以下错误而配置的密码:用户名或   密码不正确。

我已尝试 BeforeInstall HostSettings 但包含 ServiceName 等但不包含密码。

0 个答案:

没有答案