未安装服务时在当前进程运行
This commit is contained in:
@@ -1,15 +1,15 @@
|
|||||||
|
use std::{io, thread};
|
||||||
use std::ffi::OsString;
|
use std::ffi::OsString;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::{io, thread};
|
|
||||||
|
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use console::style;
|
use console::style;
|
||||||
|
use windows_service::Error;
|
||||||
use windows_service::service::{
|
use windows_service::service::{
|
||||||
ServiceAccess, ServiceErrorControl, ServiceInfo, ServiceStartType, ServiceState, ServiceType,
|
ServiceAccess, ServiceErrorControl, ServiceInfo, ServiceStartType, ServiceState, ServiceType,
|
||||||
};
|
};
|
||||||
use windows_service::service_manager::{ServiceManager, ServiceManagerAccess};
|
use windows_service::service_manager::{ServiceManager, ServiceManagerAccess};
|
||||||
use windows_service::Error;
|
|
||||||
|
|
||||||
use crate::config;
|
use crate::config;
|
||||||
|
|
||||||
@@ -18,9 +18,9 @@ mod windows_admin_check;
|
|||||||
|
|
||||||
#[derive(Parser, Debug)]
|
#[derive(Parser, Debug)]
|
||||||
#[command(
|
#[command(
|
||||||
author = "Lu Beilin",
|
author = "Lu Beilin",
|
||||||
version,
|
version,
|
||||||
about = "一个虚拟网络工具,启动后会获取一个ip,相同token下的设备之间可以用ip直接通信"
|
about = "一个虚拟网络工具,启动后会获取一个ip,相同token下的设备之间可以用ip直接通信"
|
||||||
)]
|
)]
|
||||||
struct Args {
|
struct Args {
|
||||||
/// 32位字符
|
/// 32位字符
|
||||||
@@ -109,50 +109,50 @@ pub fn main0() {
|
|||||||
println!("{}", style("卸载成功").green())
|
println!("{}", style("卸载成功").green())
|
||||||
}
|
}
|
||||||
} else if args.start {
|
} else if args.start {
|
||||||
match service_state() {
|
if args.token.is_none() {
|
||||||
Ok(state) => {
|
println!("{}", style("需要参数 --token").red());
|
||||||
if state == ServiceState::Stopped {
|
} else {
|
||||||
if args.token.is_none() {
|
let token = args.token.clone().unwrap();
|
||||||
println!("{}", style("需要参数 --token").red());
|
match service_state() {
|
||||||
} else {
|
Ok(state) => {
|
||||||
let token = args.token.clone().unwrap();
|
if state == ServiceState::Stopped {
|
||||||
config::save_config(config::ArgsConfig::new(
|
config::save_config(config::ArgsConfig::new(
|
||||||
token.clone(),
|
token.clone(),
|
||||||
args.name.clone(),
|
args.name.clone(),
|
||||||
))
|
))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
match start() {
|
match start() {
|
||||||
Ok(_) => {
|
Ok(_) => {
|
||||||
//需要检查启动状态
|
//需要检查启动状态
|
||||||
println!("{}", style("启动成功").green())
|
println!("{}", style("启动成功").green())
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
match e {
|
|
||||||
Error::Winapi(ref e) => {
|
|
||||||
if let Some(code) = e.raw_os_error() {
|
|
||||||
if code == 1060 {
|
|
||||||
//指定的服务未安装。
|
|
||||||
println!(
|
|
||||||
"{}",
|
|
||||||
style("服务未安装,在当前进程启动").red()
|
|
||||||
);
|
|
||||||
crate::start(token, args.name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
log::error!("{:?}", e);
|
log::error!("{:?}", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
println!("服务未停止");
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
println!("服务未停止");
|
|
||||||
}
|
}
|
||||||
}
|
Err(e) => {
|
||||||
Err(e) => {
|
match e {
|
||||||
println!("{:?}", e);
|
Error::Winapi(ref e) => {
|
||||||
|
if let Some(code) = e.raw_os_error() {
|
||||||
|
if code == 1060 {
|
||||||
|
//指定的服务未安装。
|
||||||
|
println!(
|
||||||
|
"{}",
|
||||||
|
style("服务未安装,在当前进程启动").red()
|
||||||
|
);
|
||||||
|
crate::start(token, args.name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
println!("{:?}", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if args.stop {
|
} else if args.stop {
|
||||||
|
|||||||
Reference in New Issue
Block a user