diff --git a/app/main/handlers/upgradeUtil.js b/app/main/handlers/upgradeUtil.js index 01b48cab68..6df5b52a9d 100644 --- a/app/main/handlers/upgradeUtil.js +++ b/app/main/handlers/upgradeUtil.js @@ -479,7 +479,7 @@ module.exports = { }) zipHandler.on("ready", () => { const targetPath = path.join(YakitProjectPath, output_name) - zipHandler.extract(output_name, targetPath, (err, res) => { + zipHandler.extract(output_name, targetPath, (err, res) => { if (!fs.existsSync(targetPath)) { reject(`Extract Cert Script Failed`) } else { @@ -631,5 +631,52 @@ module.exports = { } return await asyncInitBuildInEngine({}) }) + + // 解压 start-engine.zip + const generateStartEngineGRPC = () => { + return new Promise((resolve, reject) => { + const all = "start-engine.zip" + const output_name = isWindows ? `start-engine-grpc.bat` : `start-engine-grpc.sh` + + // 如果存在就不在解压 + if(fs.existsSync(path.join(yaklangEngineDir,output_name))){ + resolve("") + return + } + + if (!fs.existsSync(loadExtraFilePath(path.join("bins/scripts", all)))) { + reject(all + " not found") + return + } + const zipHandler = new zip({ + file: loadExtraFilePath(path.join("bins/scripts", all)), storeEntries: true, + }) + zipHandler.on("ready", () => { + const targetPath = path.join(yaklangEngineDir, output_name) + zipHandler.extract(output_name, targetPath, (err, res) => { + if (!fs.existsSync(targetPath)) { + reject(`Extract Start Engine GRPC Script Failed`) + } else { + // 如果不是 Windows,给脚本文件添加执行权限 + if (!isWindows) { + fs.chmodSync(targetPath, 0o755); + } + resolve("") + } + zipHandler.close(); + }) + }) + zipHandler.on("error", err => { + console.info(err) + reject(`${err}`) + zipHandler.close() + }) + }) + } + + + ipcMain.handle("generate-start-engine", async (e) => { + return await generateStartEngineGRPC() + }) }, } \ No newline at end of file diff --git a/app/main/uiOperate/hardware.js b/app/main/uiOperate/hardware.js index 61b2a3d1fa..e29d349f75 100644 --- a/app/main/uiOperate/hardware.js +++ b/app/main/uiOperate/hardware.js @@ -114,7 +114,7 @@ module.exports = (win, getClient) => { }) /** 打开 yaklang 或 yakit 文件所在文件夹 (ps:随着yakit下载移动至下载文件夹中,此方法仅打开yaklang)*/ - ipcMain.handle("open-yakit-or-yaklang", (e) => { + ipcMain.handle("open-yaklang-path", (e) => { return shell.openPath(yaklangEngineDir) }) diff --git a/app/renderer/src/main/src/NewApp.tsx b/app/renderer/src/main/src/NewApp.tsx index 4e81f3591a..b154f95169 100644 --- a/app/renderer/src/main/src/NewApp.tsx +++ b/app/renderer/src/main/src/NewApp.tsx @@ -35,6 +35,11 @@ function NewApp() { /** 是否展示用户协议 */ const [agreed, setAgreed] = useState(false) + useEffect(() => { + // 解压命令执行引擎脚本压缩包 + ipcRenderer.invoke("generate-start-engine") + }, []) + /** * 渲染端全局错误监听,并收集到错误信息文件里 */ diff --git a/app/renderer/src/main/src/components/basics/YakitLoading.tsx b/app/renderer/src/main/src/components/basics/YakitLoading.tsx index abfa860c61..cb328a0a51 100644 --- a/app/renderer/src/main/src/components/basics/YakitLoading.tsx +++ b/app/renderer/src/main/src/components/basics/YakitLoading.tsx @@ -4,11 +4,15 @@ import {YakitStatusType, YaklangEngineMode} from "@/yakitGVDefine" import {YakitButton} from "../yakitUI/YakitButton/YakitButton" import {getReleaseEditionName, isCommunityEdition, isEnpriTrace, isEnpriTraceAgent} from "@/utils/envfile" import {DynamicStatusProps} from "@/store" +import {Tooltip} from "antd" +import {OutlineQuestionmarkcircleIcon} from "@/assets/icon/outline" import yakitSE from "@/assets/yakitSE.png" import yakitEE from "@/assets/yakitEE.png" import styles from "./yakitLoading.module.scss" +const {ipcRenderer} = window.require("electron") + /** 首屏加载蒙层展示语 */ const LoadingTitle: string[] = [ "没有困难的工作,只有勇敢的打工人。", @@ -260,7 +264,20 @@ export const YakitLoading: React.FC = (props) => { -
{btns}
+
+ {btns} +
{ + ipcRenderer.invoke("open-yaklang-path") + }} + > + 打开引擎所在文件 + + + +
+
diff --git a/app/renderer/src/main/src/components/basics/yakitLoading.module.scss b/app/renderer/src/main/src/components/basics/yakitLoading.module.scss index 2d187d50bc..c2de73f36d 100644 --- a/app/renderer/src/main/src/components/basics/yakitLoading.module.scss +++ b/app/renderer/src/main/src/components/basics/yakitLoading.module.scss @@ -115,6 +115,26 @@ .btn-style { width: 280px; } + + .engine-help-wrapper { + width: 280px; + display: flex; + justify-content: center; + align-items: center; + gap: 4px; + line-height: 20px; + color: #b4bbca; + font-size: 14px; + cursor: pointer; + svg { + width: 16px; + height: 16px; + } + + &:hover { + color: var(--yakit-primary-5); + } + } } } } diff --git a/bins/scripts/start-engine.zip b/bins/scripts/start-engine.zip new file mode 100644 index 0000000000..b68839ad2b Binary files /dev/null and b/bins/scripts/start-engine.zip differ diff --git a/electron-builder.yaml b/electron-builder.yaml index c8e593b5ed..24239f892e 100644 --- a/electron-builder.yaml +++ b/electron-builder.yaml @@ -7,6 +7,8 @@ copyright: Copyright © 2024 yaklang.io extraFiles: - from: "bins/scripts/auto-install-cert.zip" to: "bins/scripts/auto-install-cert.zip" + - from: "bins/scripts/start-engine.zip" + to: "bins/scripts/start-engine.zip" - from: "bins/flag.txt" to: "bins/flag.txt" - from: "bins/engine-version.txt"