From c8629845bdd5421a114eba5b7672e7888277a3be Mon Sep 17 00:00:00 2001 From: dinglili Date: Thu, 18 Jul 2024 14:38:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=BC=80=E5=8F=91=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E5=BF=AB=E9=80=9F=E9=83=A8=E7=BD=B2=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E5=8F=96=E6=B6=88,=E4=B8=8D=E8=BE=93=E5=85=A5=E5=AF=86?= =?UTF-8?q?=E7=A0=81,=E5=AE=89=E8=A3=85=E8=BF=9B=E5=BA=A6=E5=88=B0?= =?UTF-8?q?=E4=B8=8D=E4=BA=86100%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../electron-sandbox/deploy/deployWindow.html | 9 +-- .../deploy/deployWindowMain.ts | 5 +- .../issue/electron-main/deployMainService.ts | 80 ++++++++++++------- 3 files changed, 58 insertions(+), 36 deletions(-) diff --git a/src/vs/code/electron-sandbox/deploy/deployWindow.html b/src/vs/code/electron-sandbox/deploy/deployWindow.html index 64e02374..e075e180 100644 --- a/src/vs/code/electron-sandbox/deploy/deployWindow.html +++ b/src/vs/code/electron-sandbox/deploy/deployWindow.html @@ -1,7 +1,6 @@ - +

 									
 									
 									
-									
 								
diff --git a/src/vs/code/electron-sandbox/deploy/deployWindowMain.ts b/src/vs/code/electron-sandbox/deploy/deployWindowMain.ts index ba40e2fc..cf6b5a03 100644 --- a/src/vs/code/electron-sandbox/deploy/deployWindowMain.ts +++ b/src/vs/code/electron-sandbox/deploy/deployWindowMain.ts @@ -114,7 +114,7 @@ class deployWindow { // dst: utils.configDir() } //联网检查是否有合适的文件 - ipcRenderer.send("kylinide.installWizard.checkInstall", messageData); + await ipcRenderer.invoke('kylinide.installWizard.checkInstall', messageData); } else { this.extInstallState.set(msg.depName, 11); @@ -473,7 +473,6 @@ class deployWindow { type: "configSelect", select: select } - // ipcRenderer.send('kylinide.installWizard.init', data); console.log("renderer send kylinide.installWizard.init.configSelect"); let result = await ipcRenderer.invoke('kylinide.installWizard.init.configSelect', data); @@ -1037,7 +1036,7 @@ class deployWindow { }); for (var i = 0; i < elements.length; i++) { - elements[i].addEventListener("change", (event) => { + elements[i].addEventListener("change", async (event) => { // 根据选中不同的checkbox,显示不同输出; const target = event.target as HTMLInputElement; if (target!.checked) { diff --git a/src/vs/platform/issue/electron-main/deployMainService.ts b/src/vs/platform/issue/electron-main/deployMainService.ts index e1fb7460..49676cc4 100644 --- a/src/vs/platform/issue/electron-main/deployMainService.ts +++ b/src/vs/platform/issue/electron-main/deployMainService.ts @@ -82,7 +82,7 @@ export class DeployMainService implements IDeployMainService { extDownloadPath: string = ""; // public extensionsGalleryConfiguration!: IExtensionsGalleryConfiguration; // private preExtensionsGalleryConfig: IExtensionsGalleryConfiguration; - installQueue: { installCommand: any; msg: any; }[] = []; // 定义一个消息队列 + installQueue: { installCommand: any; msg: any; }[] | null = []; // 定义一个消息队列 extMap: Record = {}; depList: string[] = []; extList: string[] = []; @@ -93,6 +93,7 @@ export class DeployMainService implements IDeployMainService { pkglogFsWatcher: fs.FSWatcher | null = null; //执行安装脚本的进程号; installProcessId: ChildProcess | null = null; + cancelInstallProcessId: ChildProcess | null = null; cancelFlag = false; offset = 0; resultIndex = 0; @@ -129,8 +130,8 @@ export class DeployMainService implements IDeployMainService { this.updateConfigDir = installUtils.installConfigDirPre() + "/" + installUtils.getDateDir(); this.reset(); this.logger = this.loggerMainService.createLogger(URI.file(this.installConfig + "/log/instguide.log")); - this.loggerExt = this.loggerMainService.createLogger(URI.file(this.installConfig + "/log/extinstdetail.log")); - this.loggerSoft = this.loggerMainService.createLogger(URI.file(this.installConfig + "/log/softinstdetail.log")); + this.loggerExt = this.loggerMainService.createLogger(URI.file(this.installConfig + "/log/extdetail.log")); + this.loggerSoft = this.loggerMainService.createLogger(URI.file(this.installConfig + "/log/softdetail.log")); this.removeListeners(); this.registerListeners(); } @@ -144,6 +145,7 @@ export class DeployMainService implements IDeployMainService { this.logFile0 = this.installConfig + '/log/install.1.log'; this.resultFile = this.installConfig + '/resultFile'; this.extLogFile0 = this.installConfig + '/log/extInstall.1.log'; + this.installQueue = []; this.baseUrl = ""; this.extDownloadPath = ""; @@ -157,6 +159,7 @@ export class DeployMainService implements IDeployMainService { this.pkglogFsWatcher = null; //执行安装脚本的进程号; this.installProcessId = null; + this.cancelInstallProcessId = null; this.cancelFlag = false; this.offset = 0; this.resultIndex = 0; @@ -222,12 +225,12 @@ export class DeployMainService implements IDeployMainService { installCommand = comandpath + " " + "--install-extension" + " " + installItem; } this.logger.debug("安装 ext installCommand", installCommand); - if (this.installQueue.length === 0) { + if (this.installQueue?.length === 0) { this.installQueue.push({ installCommand, msg }); await this.executeNextInstall(); } else { - this.installQueue.push({ installCommand, msg }); + this.installQueue?.push({ installCommand, msg }); } } catch (error) { this.logger.error(`安装 ext 执行出错 ${installCommand}: ${error.message}`); @@ -374,45 +377,45 @@ export class DeployMainService implements IDeployMainService { this.logger.info("取消依赖包安装"); // var killcommand = `pkexec sudo pkill -TERM -P ${installProcessId.pid}`; var killcommand = `pkexec sudo pkill -f 'bash ${this.installConfig}/install.sh'`; - const sudokill = spawn(killcommand, { shell: true, stdio: 'inherit' }); + this.cancelInstallProcessId = spawn(killcommand, { shell: true, stdio: 'inherit' }); - sudokill.on('exit', (code, signal) => { + this.cancelInstallProcessId.on('exit', (code, signal) => { this.logger.info('取消安装结束', code) - if (code == 127) { - this.println('授权失败', code); - this.logger.error("取消安装授权失败"); + if (code == 127 || code == 126) { + this.logger.error("取消安装授权失败:", code); } else { + this.cancelFlag = true; if (this.DeployWindow) { this.DeployWindow.webContents.send("kylinide.installWizard.removeFileLister", { type: 'installFile' }); this.DeployWindow.webContents.send("kylinide.installWizard.removeFileLister", { type: 'extFile' }); this.DeployWindow.webContents.send("kylinide.installWizard.removeFileLister", { type: 'pkgFile' }); } this.controller.abort(); - this.installQueue.splice(0); + this.installQueue?.splice(0); + this.installQueue = null; //结束插件下载及安装 if (this.DeployWindow) { this.DeployWindow.webContents.send("kylinide.installWizard.cancelInstall", { type: "cancelinstall" }); this.DeployWindow.webContents.send("kylinide.installWizard.msg", { type: "cancelinstall" }); } } - this.println('kill Exit code:', code); + this.logger.info('kill Exit code:cancelinstallprocessid:', code); }); - this.println("取消安装after"); } else { - this.println("取消安装其他情况"); - if (this.DeployWindow) { - this.DeployWindow.webContents.send("kylinide.installWizard.removeFileLister", { type: 'installFile' }); - this.DeployWindow.webContents.send("kylinide.installWizard.removeFileLister", { type: 'extFile' }); - this.DeployWindow.webContents.send("kylinide.installWizard.removeFileLister", { type: 'pkgFile' }); - } + this.logger.info("取消安装"); this.controller.abort(); this.cancelFlag = true; - this.installQueue.splice(0); + this.installQueue?.splice(0); //结束插件下载及安装 if (this.DeployWindow) { this.DeployWindow.webContents.send("kylinide.installWizard.cancelInstall", { type: 'cancelinstall' }); this.DeployWindow.webContents.send("kylinide.installWizard.msg", { type: "cancelinstall" }); } + if (this.DeployWindow) { + this.DeployWindow.webContents.send("kylinide.installWizard.removeFileLister", { type: 'installFile' }); + this.DeployWindow.webContents.send("kylinide.installWizard.removeFileLister", { type: 'extFile' }); + this.DeployWindow.webContents.send("kylinide.installWizard.removeFileLister", { type: 'pkgFile' }); + } } } @@ -664,8 +667,10 @@ export class DeployMainService implements IDeployMainService { this.DownSelectKey.configList = msg.configList; // scriptList = message.scriptList; this.extMap = {}; + return void 0; }; - listenerCheckInstall = async (event: IpcMainEvent, msg: any) => { + + handleCheckInstall = async (event: IpcMainInvokeEvent, msg: any) => { this.println("kylinide.installWizard.checkInstall"); if (this.startInstallDepWatch === 1) { @@ -718,7 +723,7 @@ export class DeployMainService implements IDeployMainService { // this.logger.debug(`install pkg输出信息更新:${updatedContent}`); if (updatedContent.length > 0) - fs.appendFileSync(this.installConfig + "/log/soft.log", updatedContent); + fs.appendFileSync(this.installConfig + "/log/softdetail.log", updatedContent); if (this.DeployWindow) this.DeployWindow.webContents.send("kylinide.installWizard.msg", installMsg); } @@ -826,12 +831,13 @@ export class DeployMainService implements IDeployMainService { } }); this.startInstallDepWatch = 1; + return void 0; + }; - } + handleDownExten = async (event: IpcMainInvokeEvent, message: any) => { - listenerDownExten = async (event: IpcMainEvent, message: any) => { - - this.installQueue.splice(0); + this.println("kylinide.installWizard.downloadExt"); + this.installQueue?.splice(0); let depObject = JSON.parse(fs.readFileSync(message.extAddressPath, 'utf-8')); let extLatestDownloadUrlList = []; let extDownloadUrlList = []; @@ -946,6 +952,7 @@ export class DeployMainService implements IDeployMainService { private removeListeners(): void { this.logger.info("移除监听器"); //接收从渲染进程发送的消息 + validatedIpcMain.removeListener('kylinide.installWizard.show', this.listenerShow); validatedIpcMain.removeListener('kylinide.installWizard.helpLink', this.listenerHelpLink); validatedIpcMain.removeListener('kylinide.installWizard.minw', this.listenerMiniWindow); validatedIpcMain.removeListener('kylinide.installWizard.closeWizard', this.listenerCloseWindow); @@ -956,6 +963,7 @@ export class DeployMainService implements IDeployMainService { private registerListeners(): void { this.logger.info("注册监听器"); //接收从渲染进程发送的消息 + validatedIpcMain.on('kylinide.installWizard.show', this.listenerShow); validatedIpcMain.on('kylinide.installWizard.helpLink', this.listenerHelpLink); validatedIpcMain.on('kylinide.installWizard.minw', this.listenerMiniWindow); validatedIpcMain.on('kylinide.installWizard.closeWizard', this.listenerCloseWindow); @@ -966,6 +974,12 @@ export class DeployMainService implements IDeployMainService { //handle从渲染进程发送的消息 validatedIpcMain.handle('kylinide.installWizard.init.configVersify', this.handleInitConfigVersify); validatedIpcMain.handle('kylinide.installWizard.init.configSelect', this.handleInitConfigSelect); + validatedIpcMain.handle('kylinide.installWizard.init.configGetValue', this.handleInitConfigGetValue); + validatedIpcMain.handle('kylinide.installWizard.init.httpVerify', this.handleHttpVerify); + validatedIpcMain.handle('kylinide.installWizard.msg.deplist', this.handleDepList); + validatedIpcMain.handle('kylinide.installWizard.checkInstall', this.handleCheckInstall); + validatedIpcMain.handle('kylinide.installWizard.downloadExt', this.handleDownExten); + } //#endregion @@ -990,6 +1004,7 @@ export class DeployMainService implements IDeployMainService { } } }); + } catch (error) { this.logger.error(`执行脚本时出错: ${error.message}`); this.loggerSoft.error(`执行脚本时出错: ${error.message}`); @@ -1025,13 +1040,16 @@ export class DeployMainService implements IDeployMainService { } async executeNextInstall() { - if (this.installQueue.length === 0) { + if (this.installQueue?.length === 0) { return; // 队列为空,结束执行 } if (this.cancelFlag) { - this.installQueue.splice(0); + this.installQueue?.splice(0); return; } + if (!this.installQueue) + return; + const { installCommand, msg } = this.installQueue[0]; try { const extlogFile = this.installConfig + '/log/extInstall.1.log'; @@ -1128,6 +1146,12 @@ export class DeployMainService implements IDeployMainService { closeWindow() { if (this.DeployWindow) { + if (this.installProcessId) { + this.installProcessId.kill(); + } + if (this.cancelInstallProcessId) { + this.cancelInstallProcessId.kill(); + } this.DeployWindow.close(); } }