#service #windows-system #hassle #called #user

winservice

轻松运行Windows系统服务

2个版本

使用旧的Rust 2015

0.1.1 2016年10月2日
0.1.0 2016年2月26日

155Windows API

每月下载 23

Apache-2.0

12KB
169

winservice

一个非常小的Rust库,可以轻松设置和运行Windows系统服务。

文档

示例用法

Cargo.toml:

[dependencies]
winservice = "0.1.1"

main.rs:

#![no_main]
#![feature(link_args)]
#![link_args = "-Wl,--subsystem,windows"]

use std::os::raw::{c_char, c_int, c_void};
use std::sync::mpsc::Receiver;

#[macro_use]
extern crate winservice;

#[allow(non_snake_case)]
#[no_mangle]
pub extern "system" fn WinMain(hInstance : *const c_void, hPrevInstance : *const c_void,
    lpCmdLine : *const c_char, nCmdShow : c_int) -> c_int
{
    Service!("myService", service_main)
}

fn service_main(args : Vec<String>, end : Receiver<()>) -> u32 {
    loop {
        // Do some work
        if let Ok(_) = end.try_recv() { break; } }
 0 }

lib.rs:

轻松运行Windows系统服务。

此crate导出两种方法,但不应从用户代码中直接调用它们!相反,请使用提供的 Service! 宏。导出是必要的,因为没有方法可以向ServiceMain回调提供自定义用户指针,该指针可以用来提取其上下文。有趣的是,这 可行的,对于ControlHandlerEx回调,所以我们至少只需要使用这个肮脏的技巧一次。

无运行时依赖