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)
}