当前位置: 首页 > news >正文

营销型网站建设 网络服务淄博百度推广

营销型网站建设 网络服务,淄博百度推广,晟合建设集团网站,电影宣传网站开发设计文章目录 Rust编写Windows服务一#xff1a;Windows服务程序大致原理二#xff1a;Rust中编写windows服务三#xff1a;具体实例 Rust编写Windows服务 编写Windows服务可选语言很多, 其中C#最简单。本着练手Rust语言#xff0c;尝试用Rust编写一个服务。 一#xff1a;Win… 文章目录 Rust编写Windows服务一Windows服务程序大致原理二Rust中编写windows服务三具体实例 Rust编写Windows服务 编写Windows服务可选语言很多, 其中C#最简单。本着练手Rust语言尝试用Rust编写一个服务。 一Windows服务程序大致原理 参考官网C/C创建服务流程 https://learn.microsoft.com/zh-cn/windows/win32/services/service-program-tasks 编写服务程序的main函数 main函数中填充数据结构 DispatchTable: [[服务名ServiceMain函数], [NULL, NULL]]调用StartServiceCtrlDispatcher( DispatchTable ) int __cdecl _tmain(int argc, TCHAR *argv[]) { SERVICE_TABLE_ENTRY DispatchTable[] { { SVCNAME, (LPSERVICE_MAIN_FUNCTION) SvcMain }, { NULL, NULL } }; if (!StartServiceCtrlDispatcher( DispatchTable )) { SvcReportEvent(TEXT(StartServiceCtrlDispatcher)); } } 编写 ServiceMain 函数 注册控制处理函数 RegisterServiceCtrlHandler(SvcCtrlHandler )设置服务状态SERVICE_START_PENDING做一些预备工作比如初始化日志/注册事件等设置服务状态SERVICE_START_RUNNING开始loop处理我们自己的代码loop循环中可以接受3中注册的事件当通知停止时退出循环 编写控件处理程序函数 接受事件管理器发送的消息并处理比如收到SERVICE_CONTROL_STOP时使用3中注册的事件句柄发送停止事件 二Rust中编写windows服务 借用第三方库 windows-service 0.7.0 https://crates.io/crates/windows-service 参考windows-service中ping-service示例提取了一个模板只有替换编写两处/* */代码 use std::{ffi::OsString,sync::mpsc,time::Duration, }; use windows_service::{define_windows_service,service::{ServiceControl, ServiceControlAccept, ServiceExitCode, ServiceState, ServiceStatus,ServiceType,},service_control_handler::{self, ServiceControlHandlerResult},service_dispatcher, };static SERVICE_NAME: str Rust Demo Service;fn main() - Result(), windows_service::Error {service_dispatcher::start(SERVICE_NAME, ffi_service_main)?;Ok(()) }define_windows_service!(ffi_service_main, my_service_main);fn my_service_main(arguments: VecOsString) {let _ arguments;/*这里服务还没开始 可以填写初始化日志文件等操作*/let (shutdown_tx, shutdown_rx) mpsc::channel();// 对应SvcCtrlHandlerlet _event_handler move |control_event| - ServiceControlHandlerResult {match control_event {ServiceControl::Interrogate ServiceControlHandlerResult::NoError,// 处理停止事件ServiceControl::Stop {shutdown_tx.send(()).unwrap();ServiceControlHandlerResult::NoError}// 其他用户事件都当作停止事件处理ServiceControl::UserEvent(code) {if code.to_raw() 130 {shutdown_tx.send(()).unwrap();}ServiceControlHandlerResult::NoError}_ ServiceControlHandlerResult::NotImplemented,}};let status_handle service_control_handler::register(SERVICE_NAME, _event_handler);let status_handle status_handle.unwrap();let _ status_handle.set_service_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,});loop {/*这里写自己的代码逻辑下面时处理一次循环后睡眠5秒若是接受到停止等消息退出循环*/match shutdown_rx.recv_timeout(Duration::from_secs(5)) {Ok(_) | Err(mpsc::RecvTimeoutError::Disconnected) break,Err(mpsc::RecvTimeoutError::Timeout) (),}}let _ status_handle.set_service_status(ServiceStatus {service_type: ServiceType::OWN_PROCESS,current_state: ServiceState::Stopped,controls_accepted: ServiceControlAccept::empty(),exit_code: ServiceExitCode::Win32(0),checkpoint: 0,wait_hint: Duration::default(),process_id: None,}); } 三具体实例 笔记本策略经常恢复到合上盖子睡眠功能写个小服务定时设置合上盖子不做任何操作 逻辑比较简单定时调用WinAPI函数CallNtPowerInformation获取配置信息不符合当前设置执行修改 完整如下 use std::{ffi::{c_void, OsString},sync::mpsc,time::Duration, }; use windows::Win32::{Foundation::STATUS_SUCCESS, System::Power::{CallNtPowerInformation, POWER_INFORMATION_LEVEL, SYSTEM_POWER_POLICY}}; use windows_service::{define_windows_service,service::{ServiceControl, ServiceControlAccept, ServiceExitCode, ServiceState, ServiceStatus,ServiceType,},service_control_handler::{self, ServiceControlHandlerResult},service_dispatcher, };static SERVICE_NAME: str Power Lid Service;fn main() - Result(), windows_service::Error {service_dispatcher::start(SERVICE_NAME, ffi_service_main)?;Ok(()) }define_windows_service!(ffi_service_main, my_service_main);fn my_service_main(arguments: VecOsString) {let _ arguments;let (shutdown_tx, shutdown_rx) mpsc::channel();let _event_handler move |control_event| - ServiceControlHandlerResult {match control_event {ServiceControl::Interrogate ServiceControlHandlerResult::NoError,ServiceControl::Stop {shutdown_tx.send(()).unwrap();ServiceControlHandlerResult::NoError}ServiceControl::UserEvent(code) {if code.to_raw() 130 {shutdown_tx.send(()).unwrap();}ServiceControlHandlerResult::NoError}_ ServiceControlHandlerResult::NotImplemented,}};let status_handle service_control_handler::register(SERVICE_NAME, _event_handler);let status_handle status_handle.unwrap();let _ status_handle.set_service_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,});loop {unsafe {let mut a: SYSTEM_POWER_POLICY std::mem::zeroed();let status CallNtPowerInformation(POWER_INFORMATION_LEVEL { 0: 8 },None,0,Some(mut a as *mut SYSTEM_POWER_POLICY as *mut c_void),size_of::SYSTEM_POWER_POLICY() as u32,);if status ! STATUS_SUCCESS {println!(获取电源状态失败: {:x} !, status.0);return;}if a.LidClose.Action.0 0 {println!(状态已为0, 忽略);return;} else {println!(状态为{:x}, a.LidClose.Action.0);a.LidClose.Action.0 0;let status CallNtPowerInformation(POWER_INFORMATION_LEVEL { 0: 0 },Some(mut a as *mut SYSTEM_POWER_POLICY as *mut c_void),size_of::SYSTEM_POWER_POLICY() as u32,None,0,);if status ! STATUS_SUCCESS {println!(设置ac电源状态失败: {:x} !, status.0);return;} else {println!(设置AC电源状态成功);}let status CallNtPowerInformation(POWER_INFORMATION_LEVEL { 0: 1 },Some(mut a as *mut SYSTEM_POWER_POLICY as *mut c_void),size_of::SYSTEM_POWER_POLICY() as u32,None,0,);if status ! STATUS_SUCCESS {println!(设置dc电源状态失败: {:x} !, status.0);return;} else {println!(设置DC电源状态成功);}}}match shutdown_rx.recv_timeout(Duration::from_secs(5)) {Ok(_) | Err(mpsc::RecvTimeoutError::Disconnected) break,Err(mpsc::RecvTimeoutError::Timeout) (),}}let _ status_handle.set_service_status(ServiceStatus {service_type: ServiceType::OWN_PROCESS,current_state: ServiceState::Stopped,controls_accepted: ServiceControlAccept::empty(),exit_code: ServiceExitCode::Win32(0),checkpoint: 0,wait_hint: Duration::default(),process_id: None,}); }
http://www.w-s-a.com/news/179800/

相关文章:

  • 有什么方法在淘宝发布网站建设设计wordpress评分
  • 自己做的网站怎么爬数据库酷播wordpress
  • 广州哪家做网站还可以黑龙江省建设厅网站的电话
  • 青海省高等级公路建设管局网站国内做led灯网站有
  • 做网站成功建设银行网站网址
  • 自动生成网站上海十大活动策划公司
  • 企业网站建设源码HTML论述市场营销对网站设计的影响
  • 网站设计常见问题建设工程网上质检备案网站
  • 网站怎样优化文章关键词建设网站需要钱吗
  • 加强网站建设和管理的通知重庆网站推广产品
  • 网站建设术语解释百度发布信息的免费平台
  • 情公司做的网站seo与网站优化 pdf
  • 做一个购物网站多少钱江阴市住房和城乡建设局网站
  • 网站建设都包括哪些ps怎么做网站首页和超链接
  • 怎样低成本做网站推广编辑网站教程
  • 邯郸网站建设信息网站开发报价人天
  • 王店镇建设中心小学网站酷玛网站建设
  • 网站需求方案wordpress博客主题推荐
  • 网站安全证书过期怎么办那个视频网站最好最全网址
  • 外贸上哪个网站开发客户建行个人网上银行登录入口
  • 空间除了可以做网站还能干什么qq钓鱼网站
  • 网站 技术企业网站用免费程序
  • 做网站的中文名字汕尾网站开发
  • 网站推广效果推广网站推荐
  • 腾讯企业网站建设网络推广比较经典和常用的方法有
  • 四川成都网站网页设计上海外贸网站制作公司
  • wordpress模板首页图片锦州网站做优化
  • 哔哩哔哩网站建设分析有哪些做网站好的公司
  • 福建建设执业中心网站沧州网络推广外包公司
  • 做网站怎么改关键词营销网站建设818gx