extern crate windows_service;
use std::ffi::OsString;
use std::thread;
use std::time::Duration;
use windows_service::service::{
ServiceControl, ServiceControlAccept, ServiceExitCode, ServiceState, ServiceStatus,
ServiceType,
};
use windows_service::service_control_handler::{self, ServiceControlHandlerResult};
fn my_service_main(arguments: Vec<OsString>) {
if let Err(e) = run_service(arguments) {
println!("{}", e);
}
}
fn run_service(arguments: Vec<OsString>) -> windows_service::Result<()> {
let event_handler = move |control_event| -> ServiceControlHandlerResult {
match control_event {
ServiceControl::Stop | ServiceControl::Interrogate => {
ServiceControlHandlerResult::NoError
}
_ => ServiceControlHandlerResult::NotImplemented,
}
};
let status_handle = service_control_handler::register("my_service_name", event_handler)?;
let next_status = ServiceStatus {
service_type: ServiceType::OWN_PROCESS,
current_state: ServiceState::Running,
controls_accepted: ServiceControlAccept::STOP,
exit_code: ServiceExitCode::Win32(0),
checkpoint: 0,
wait_hint: Duration::default(),
process_id: None,
};
status_handle.set_service_status(next_status)?;
// for i in 0..100000{
// println!("{}", i);
// thread::sleep(Duration::from_secs(10));
// }
Ok(())
}
fn main() {
let args: Vec<OsString> = std::env::args_os().collect();
my_service_main(args);
}
}```
from the example in https://docs.rs/windows-service/latest/windows_service/
`IO error in winapi call`
A crate that provides facilities for management and implementation of windows services.
