示例#1
0
  /**
   * Install the service.
   *
   * @return true on success
   * @param displayName visible name
   * @param description description
   * @param dependencies array of other services to depend on or null
   * @param account service account or null for LocalSystem
   * @param password password for service account or null
   * @param command command line to start the service
   * @throws java.lang.Exception
   */
  public boolean install(
      String displayName,
      String description,
      String[] dependencies,
      String account,
      String password,
      String command) {
    Advapi32 advapi32;
    Advapi32.SERVICE_DESCRIPTION desc;
    SC_HANDLE service, serviceManager;
    boolean success = false;
    String dep = "";

    if (dependencies != null) {
      for (String s : dependencies) {
        dep += s + "\0";
      }
    }
    dep += "\0";

    desc = new Advapi32.SERVICE_DESCRIPTION();
    desc.lpDescription = description;

    advapi32 = Advapi32.INSTANCE;
    serviceManager = openServiceControlManager(null, Winsvc.SC_MANAGER_ALL_ACCESS);

    if (serviceManager != null) {
      service =
          advapi32.CreateService(
              serviceManager,
              serviceName,
              displayName,
              Winsvc.SERVICE_ALL_ACCESS,
              WinNT.SERVICE_WIN32_OWN_PROCESS,
              WinNT.SERVICE_DEMAND_START,
              WinNT.SERVICE_ERROR_NORMAL,
              command,
              null,
              null,
              dep,
              account,
              password);

      if (service != null) {
        success = advapi32.ChangeServiceConfig2(service, Winsvc.SERVICE_CONFIG_DESCRIPTION, desc);
        advapi32.CloseServiceHandle(service);
      }
      advapi32.CloseServiceHandle(serviceManager);
    }
    return (success);
  }