diff --git a/src/vs/code/electron-sandbox/deploy/deployWindowMain.ts b/src/vs/code/electron-sandbox/deploy/deployWindowMain.ts index 1e406d1f..0e4c8549 100644 --- a/src/vs/code/electron-sandbox/deploy/deployWindowMain.ts +++ b/src/vs/code/electron-sandbox/deploy/deployWindowMain.ts @@ -472,13 +472,13 @@ class deployWindow { const parentdivshow = document.getElementById('osInfoShow') as HTMLDivElement; parentdiv.innerHTML = ""; parentdivshow.innerHTML = ""; - let osinfo; - if (!result.osinfo) { - osinfo = `
操作系统检测脚本运行失败,未成功检测到操作系统类型
` + let osrelease; + if (!result.osrelease) { + osrelease = `操作系统检测脚本运行失败,未成功检测到操作系统类型
` } else { - osinfo = `已检测到当前操作系统信息为:${result.osinfo}
`; + osrelease = `已检测到当前操作系统信息为:${result.osrelease}
`; } - parentdiv.innerHTML = osinfo; + parentdiv.innerHTML = osrelease; let dataSys = ""; let osdiv; osdiv = `判断依据:
cat ${result.osFile}
`; @@ -608,8 +608,8 @@ class deployWindow { console.log("kylinide.installWizard.init.configVersify result is void"); return; } - console.log("kylinide.installWizard.init configVersify result:" + JSON.stringify(configData)); - console.log(configData.type + " " + configData.selectPageShow + " " + configData.message); + // console.log("kylinide.installWizard.init configVersify result:" + JSON.stringify(configData)); + // console.log(configData.type + " " + configData.selectPageShow + " " + configData.message); if (configData.selectPageShow) { const onlineUpdateConfig = document.getElementById("onlineUpdateConfig") as HTMLInputElement; const onlineLocalConfig = document.getElementById("onlineLocalConfig") as HTMLInputElement; @@ -628,6 +628,7 @@ class deployWindow { parentdiv.innerHTML = configData.message; } else if (configData.selectPageShow == 4) { onlineUpdateConfig.checked = true; + parentdiv.innerHTML = configData.message; } } if (this.nextBtn && this.prevBtn) { @@ -1232,13 +1233,10 @@ class EventInvokeCheck { } export function startup(configuration: DeployWindowConfiguration): void { - console.log("-----------------dll---------head----startupdeploy"); // const platformClass = configuration.data.platform === 'win32' ? 'windows' : configuration.data.platform === 'linux' ? 'linux' : 'mac'; // mainWindow.document.body.classList.add(platformClass); // used by our fonts // createCodiconStyleSheet(); // applyZoom(configuration.data.zoomLevel); - - console.log("-----------------dll-------------startupdeploy"); new deployWindow(configuration.windowId); } diff --git a/src/vs/platform/issue/electron-main/deployMainService.ts b/src/vs/platform/issue/electron-main/deployMainService.ts index dc7e7530..0f140b32 100644 --- a/src/vs/platform/issue/electron-main/deployMainService.ts +++ b/src/vs/platform/issue/electron-main/deployMainService.ts @@ -66,17 +66,15 @@ export class DeployMainService implements IDeployMainService { private DeployWindow: BrowserWindow | null = null; - // private sysinfo: installInfo; - // private installconfigpath: string; - private localConfigObject: { res: number; depConfigInfo: any; g_index_Object: any; osinfo: string; localConfigMatch: number; }; - // private baseUrl: string = ""; private selectObject = { dirPath: "", updateFlag: false, depInfoJsonPath: "", //选中的依赖配置文件路径, extAddressPath: "",//选中的插件配置文件路径 - } - updateConfigObject: { res: number; g_index_Object: any; osinfo: string; ConfigMatch: number; base_url: any; depConfigInfo: any; }; + }; + private localConfigObject: { res: number; depConfigInfo: any; g_index_Object: any; osinfo: string; localConfigMatch: number; osrelease: string; supportList: string[] }; + updateConfigObject: { res: number; g_index_Object: any; osinfo: string; ConfigMatch: number; base_url: any; depConfigInfo: any; osrelease: string; supportList: string[] }; + localConfigDir: any; localConfigPathname: any; installConfig: any; @@ -122,32 +120,51 @@ export class DeployMainService implements IDeployMainService { private userEnv: IProcessEnvironment, @IEnvironmentMainService private readonly environmentMainService: IEnvironmentMainService, @ILoggerMainService private readonly loggerMainService: ILoggerMainService, - // @ILogService private readonly logService: ILogService, - // @IDiagnosticsService private readonly diagnosticsService: IDiagnosticsService, - // @IDiagnosticsMainService private readonly diagnosticsMainService: IDiagnosticsMainService, - // @IDialogMainService private readonly dialogMainService: IDialogMainService, - // @INativeHostMainService private readonly nativeHostMainService: INativeHostMainService, @IProtocolMainService private readonly protocolMainService: IProtocolMainService, @IProductService private readonly productService: IProductService, - // @IStateService private readonly stateService: IStateService, - // @IWindowsMainService private readonly windowsMainService: IWindowsMainService, - // @IOpenerService private readonly _openerService: IOpenerService, - // @IThemeMainService private readonly themeMainService: IThemeMainService, - // @IThemeService private readonly themeService: IThemeService, - // @INativeWorkbenchEnvironmentService private readonly environmentService: INativeWorkbenchEnvironmentService, ) { - // this.sysinfo = { IDEVersion: this.productService.IDEVersion || "", localConfigFile: "", addNewPage: 0, localosinfo: "", urlosinfo: "", urlConfigFile: "" } - this.localConfigObject = { depConfigInfo: "", res: 0, g_index_Object: "", osinfo: "", localConfigMatch: 0 }; - this.updateConfigObject = { res: 0, g_index_Object: {}, osinfo: "", ConfigMatch: 0, base_url: "", depConfigInfo: "" }; + this.localConfigObject = { depConfigInfo: "", res: 0, g_index_Object: {}, osinfo: "", localConfigMatch: 0, osrelease: "", supportList: [] }; + this.updateConfigObject = { res: 0, g_index_Object: {}, osinfo: "", ConfigMatch: 0, base_url: "", depConfigInfo: "", osrelease: "", supportList: [] }; + this.updateConfigDir = installUtils.installConfigDirPre() + "/" + installUtils.getDateDir(); + this.reset(); + this.logger = this.loggerMainService.createLogger(URI.file(this.installConfig + "/log/instguide.log")); + this.removeListeners(); + this.registerListeners(); + } + reset() { + this.localConfigObject = { depConfigInfo: "", res: 0, g_index_Object: {}, osinfo: "", localConfigMatch: 0 }; + this.localConfigObject = { depConfigInfo: "", res: 0, g_index_Object: {}, osinfo: "", localConfigMatch: 0, osrelease: "", supportList: [] }; + this.updateConfigObject = { res: 0, g_index_Object: {}, osinfo: "", ConfigMatch: 0, base_url: "", depConfigInfo: "", osrelease: "", supportList: [] }; this.localConfigDir = installUtils.localConfigPath(); this.installConfig = installUtils.installConfigDirPre();//.kylin-ide/installconfig this.updateConfigDir = installUtils.installConfigDirPre() + "/" + installUtils.getDateDir(); + this.logFile0 = this.installConfig + '/log/install.1.log'; this.resultFile = this.installConfig + '/resultFile'; this.extLogFile0 = this.installConfig + '/log/extInstall.1.log'; - this.logger = this.loggerMainService.createLogger(URI.file(this.installConfig + "/log/installguide.log")); - this.removeListeners(); - this.registerListeners(); + + this.baseUrl = ""; + this.extDownloadPath = ""; + this.extMap = {}; + this.depList = []; + this.extList = []; + this.lastLogPosition = 0; + //文件监听; + this.installFsWatcher = null; + this.extlogFsWatcher = null; + this.pkglogFsWatcher = null; + //执行安装脚本的进程号; + this.installProcessId = null; + this.cancelFlag = false; + this.offset = 0; + this.resultIndex = 0; + + this.flagPkexec = 0; + this.lastExtLogPosition = 0; + + this.startInstallDepWatch = 0; + + this.controller = new AbortController(); } //#region Register Listeners @@ -200,7 +217,13 @@ export class DeployMainService implements IDeployMainService { let installCommand = ""; try { const installItem = this.extDownloadPath + msg.downloadDone; - installCommand = "kylin-ide --install-extension " + installItem; + if (this.environmentMainService.isBuilt) { + installCommand = "kylin-code" + " " + "--install-extension" + " " + installItem; + } + else { + let comandpath = path.join(FileAccess.asFileUri('').fsPath, '..', "scripts/code-cli.sh") + installCommand = comandpath + " " + "--install-extension" + " " + installItem; + } this.logger.debug("安装 ext installCommand", installCommand); if (this.installQueue.length === 0) { this.installQueue.push({ installCommand, msg }); @@ -438,7 +461,7 @@ export class DeployMainService implements IDeployMainService { if (this.localConfigObject.res != 0 && this.updateConfigObject.res != 0) { if (this.DeployWindow) { if (this.localConfigObject.osinfo == "undefined" && this.updateConfigObject.osinfo == "undefined") { - this.logger.error("安装引导器仅支持openKylin操作系统,脚本根据/etc/os-release信息判断操作系统类型"); + this.logger.error("安装引导器仅支持openKylin操作系统,具体为", this.localConfigObject.supportList); await dialog.showMessageBox(this.DeployWindow, { type: "error", @@ -502,15 +525,15 @@ export class DeployMainService implements IDeployMainService { if (installUtils.compareVersions(this.updateConfigObject.g_index_Object.ver, this.localConfigObject.g_index_Object.ver) > 0) { //显示询问用户是否更新配置文件 //比较具体的配置文件是否一致,若是一致则还是选择本地配置,若是不同则 - let updateosinfo = this.updateConfigObject.osinfo; - let localosinfo = this.localConfigObject.osinfo; - if (this.updateConfigObject.g_index_Object["config-file"][updateosinfo][0]['sign-md5'] !== this.localConfigObject.g_index_Object["config-file"][localosinfo][0]['sign-md5']) - selectPageShow = 4; - else { - this.logger.info("联网数据与本地配置文件数据版本一致"); - selectPageShow = 3; - message = "联网数据与本地配置文件数据版本一致"; - } + selectPageShow = 4; + message = "配置文件有更新"; + // if (this.updateConfigObject.g_index_Object["config-file"][updateosinfo][0]['sign-md5'] !== this.localConfigObject.g_index_Object["config-file"][localosinfo][0]['sign-md5']) + // selectPageShow = 4; + // else { + // this.logger.info("联网数据与本地配置文件数据版本一致"); + // selectPageShow = 3; + // message = "联网数据与本地配置文件数据版本一致"; + // } } else { selectPageShow = 3; this.logger.info("联网数据与本地配置文件数据版本一致"); @@ -524,6 +547,7 @@ export class DeployMainService implements IDeployMainService { this.selectObject.extAddressPath = this.localConfigDir + "/" + this.localConfigObject.g_index_Object['ext-file']['file_name']; Data = { osinfo: this.localConfigObject.osinfo, + osrelease: this.localConfigObject.osrelease, selectPageShow: selectPageShow, type: "configVersify" } @@ -548,9 +572,9 @@ export class DeployMainService implements IDeployMainService { }; handleInitConfigSelect = async (event: IpcMainInvokeEvent, msg: any) => { - let osinfo = ""; + let osrelease = ""; if (msg.select === "local") { - osinfo = this.localConfigObject.osinfo; + osrelease = this.localConfigObject.osrelease; this.selectObject.dirPath = this.localConfigDir; this.selectObject.updateFlag = false; this.selectObject.depInfoJsonPath = this.localConfigDir + "/" + this.localConfigObject.depConfigInfo['file_name']; @@ -558,7 +582,7 @@ export class DeployMainService implements IDeployMainService { } else if (msg.select === "update") { this.selectObject.dirPath = this.updateConfigDir; this.selectObject.updateFlag = true; - osinfo = this.updateConfigObject.osinfo; + osrelease = this.updateConfigObject.osrelease; this.selectObject.depInfoJsonPath = this.updateConfigDir + "/" + this.updateConfigObject.depConfigInfo['file_name']; this.selectObject.extAddressPath = this.updateConfigDir + "/" + this.updateConfigObject.g_index_Object['ext-file']['file_name']; //error @@ -566,12 +590,12 @@ export class DeployMainService implements IDeployMainService { const { osFile, data } = this.readOSInfo(); const osObject = { type: "osinfo", - osinfo: osinfo, + osrelease: osrelease, osFile: osFile, osData: data } this.logger.info(`选择的配置文件名称:${this.selectObject.depInfoJsonPath}`); - this.logger.info(`识别操作系统信息:${osinfo}`); + this.logger.info(`识别操作系统信息:${osrelease}`); if (this.DeployWindow) { // this.DeployWindow.webContents.send('kylinide.installWizard.init', osObject); @@ -1613,10 +1637,14 @@ export class DeployMainService implements IDeployMainService { if (!this.versify(`${match_ext_filePath}`, match_ext_file_sign)) { flag++; } + //执行脚本,获取操作系统标识信息 + const functionName = 'getoscontent'; + let [osinfo, osrelease, supportList] = await this.loadAndInvokeFunction(match_script_filePath, functionName); //执行脚本,获取操作系统信息 - const functionName = 'getosinfo'; - const osinfo = await this.loadAndInvokeFunction(match_script_filePath, functionName); - this.logger.info("通过脚本" + match_script_filePath + "获取操作系统信息" + osinfo); + // const = await this.loadAndInvokeFunction(match_script_filePath, "showosinfo"); + //执行脚本,获取操作系统信息 + + this.logger.info("通过脚本" + match_script_filePath + "获取操作系统信息" + osrelease); let localConfigMatch = 0; // 检测文件是否有osinfo想匹配的 if (g_index_localDataObject["config-file"].hasOwnProperty(`${osinfo}`)) { @@ -1660,6 +1688,8 @@ export class DeployMainService implements IDeployMainService { res: res, g_index_Object: g_index_localDataObject, osinfo: osinfo, + osrelease: osrelease, + supportList: supportList, localConfigMatch: localConfigMatch, depConfigInfo: osinfo !== "undefined" ? g_index_localDataObject['config-file'][osinfo][0] : {} } @@ -1671,7 +1701,9 @@ export class DeployMainService implements IDeployMainService { g_index_Object: "", osinfo: "", localConfigMatch: -1, - depConfigInfo: {} + depConfigInfo: {}, + osrelease: "", + supportList: [] } return configData; } @@ -1722,9 +1754,9 @@ export class DeployMainService implements IDeployMainService { flag++; } //执行脚本,获取操作系统信息 - const functionName = 'getosinfo'; - let osinfo = await this.loadAndInvokeFunction(match_script_filePath, functionName); - this.logger.info("通过脚本" + match_script_filePath + "获取操作系统信息" + osinfo); + const functionName = 'getoscontent'; + let [osinfo, osrelease, supportList] = await this.loadAndInvokeFunction(match_script_filePath, functionName); + this.logger.info("通过脚本" + match_script_filePath + "获取操作系统信息" + osrelease); let ConfigMatch = 0; // 检测文件是否有osinfo想匹配的 @@ -1782,6 +1814,8 @@ export class DeployMainService implements IDeployMainService { res: res, g_index_Object: g_index_Object, osinfo: osinfo, + osrelease: osrelease, + supportList: supportList, ConfigMatch: ConfigMatch, base_url: g_index_Object['base-url'], depConfigInfo: osinfo !== "undefined" ? g_index_Object['config-file'][osinfo][0] : {} @@ -1795,7 +1829,9 @@ export class DeployMainService implements IDeployMainService { osinfo: "", ConfigMatch: -1, base_url: "", - depConfigInfo: {} + depConfigInfo: {}, + osrelease: "", + supportList: [] } return configData; }