fn create_service()

in proxy_agent_shared/src/service/windows_service.rs [234:265]


fn create_service(
    service_name: &str,
    service_display_name: &str,
    service_dependencies: Vec<&str>,
    exe_path: PathBuf,
) -> Result<()> {
    let service_manager =
        ServiceManager::local_computer(None::<&str>, ServiceManagerAccess::CREATE_SERVICE)
            .map_err(|e| Error::WindowsService(e, std::io::Error::last_os_error()))?;

    let mut vec_service_dependencies: Vec<ServiceDependency> = Vec::new();
    for src_dep in service_dependencies {
        vec_service_dependencies.push(ServiceDependency::Service(OsString::from(src_dep)));
    }
    let service_info = ServiceInfo {
        name: OsString::from(service_name),
        display_name: OsString::from(service_display_name),
        service_type: ServiceType::OWN_PROCESS,
        start_type: ServiceStartType::AutoStart,
        error_control: ServiceErrorControl::Normal,
        executable_path: exe_path,
        launch_arguments: vec![],
        dependencies: vec_service_dependencies,
        account_name: None, // run as System
        account_password: None,
    };
    service_manager
        .create_service(&service_info, ServiceAccess::QUERY_STATUS)
        .map_err(|e| Error::WindowsService(e, std::io::Error::last_os_error()))?;

    set_default_failure_actions(service_name)
}