fix: service mode error and fallback to sidecar

This commit is contained in:
GyDi 2022-11-22 20:46:46 +08:00
parent 8ba5853cdd
commit 46cc3105c4

View File

@ -107,16 +107,18 @@ impl CoreManager {
if enable { if enable {
// 服务模式启动失败就直接运行sidecar // 服务模式启动失败就直接运行sidecar
match { log::debug!(target: "app", "try to run core in service mode");
log::debug!(target: "app", "try to run core in service mode");
match (|| async {
win_service::check_service().await?; win_service::check_service().await?;
win_service::run_core_by_service(&config_path).await win_service::run_core_by_service(&config_path).await
} { })()
.await
{
Ok(_) => return Ok(()), Ok(_) => return Ok(()),
Err(err) => { Err(err) => {
// 修改这个值免得stop出错 // 修改这个值免得stop出错
*self.use_service_mode.lock() = false; *self.use_service_mode.lock() = false;
log::error!(target: "app", "{err}"); log::error!(target: "app", "{err}");
} }
} }
@ -141,7 +143,7 @@ impl CoreManager {
let (mut rx, cmd_child) = cmd.args(args).spawn()?; let (mut rx, cmd_child) = cmd.args(args).spawn()?;
// 将pid写入文件中 // 将pid写入文件中
crate::log_err!({ crate::log_err!((|| {
let pid = cmd_child.pid(); let pid = cmd_child.pid();
let path = dirs::clash_pid_path()?; let path = dirs::clash_pid_path()?;
fs::File::create(path) fs::File::create(path)
@ -149,7 +151,7 @@ impl CoreManager {
.write(format!("{pid}").as_bytes()) .write(format!("{pid}").as_bytes())
.context("failed to write pid to the file")?; .context("failed to write pid to the file")?;
<Result<()>>::Ok(()) <Result<()>>::Ok(())
}); })());
let mut sidecar = self.sidecar.lock(); let mut sidecar = self.sidecar.lock();
*sidecar = Some(cmd_child); *sidecar = Some(cmd_child);