From 763a4832b4e4d391377b6653422d9b172a2a923d Mon Sep 17 00:00:00 2001 From: qubiaobiao <3294694717@qq.com> Date: Tue, 20 Feb 2024 15:00:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AF=E4=BB=B6=E5=8A=A0=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/KeyWord.js | 3 ++ src/main/app.ts | 82 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 src/main/KeyWord.js diff --git a/src/main/KeyWord.js b/src/main/KeyWord.js new file mode 100644 index 0000000..2f9c563 --- /dev/null +++ b/src/main/KeyWord.js @@ -0,0 +1,3 @@ +// 加密关键字 +const keyword = 'GNSS' +export { keyword } \ No newline at end of file diff --git a/src/main/app.ts b/src/main/app.ts index ea84a9b..3cfe893 100644 --- a/src/main/app.ts +++ b/src/main/app.ts @@ -1,7 +1,71 @@ -import { ipcMain, app, screen, globalShortcut, BrowserWindow } from 'electron' +import { ipcMain, app, screen, globalShortcut, BrowserWindow, dialog } from 'electron' import { join } from "path"; const config = require('./config') import './load-serialport' +import { keyword } from './KeyWord' + +const child_process = require('child_process') +const crypto = require('crypto') + +function queryPass(passPath: string, passValue: string) { + return new Promise(function (resolve, reject) { + try { + child_process.exec(`reg query ${passPath} /v ${passValue}`, (error: Error, stdout: string, stderr: string) => { + if (error) { + reject(error) + return + } + resolve({stdout, stderr}) + }); + } catch (error) { + reject(error) + } + }) +} + +function queryKey(keyPath: string, keyValue: string) { + return new Promise(function (resolve, reject) { + try { + child_process.exec(`reg query ${keyPath} /v ${keyValue}`, (error: Error, stdout: string, stderr: string) => { + if (error) { + reject(error) + return + } + resolve({stdout, stderr}) + }) + } catch (error) { + reject(error) + } + }) +} + +function cryptMD5(GUID: string) { + let md5 = crypto.createHash('md5') + let ciphertext = md5.update(GUID).digest('hex') + return ciphertext.slice(0,8)+'-'+ciphertext.slice(8,12)+'-'+ciphertext.slice(12,16)+'-'+ciphertext.slice(16,20)+'-'+ciphertext.slice(20,32) +} + +const passPath = 'HKEY_CURRENT_USER\\SOFTWARE\\HwaSmart' +const passValue = 'BDAuthorization' +const keyPath = 'HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography' +const keyValue = 'MachineGuid' + +async function checkLaunchEnv() { + try { + const passResult: any = await queryPass(passPath, passValue) + const keyResult: any = await queryKey(keyPath, keyValue) + if(cryptMD5(keyResult.stdout.slice(83,119) + keyword) == passResult.stdout.slice(72,108)){ + return true + }else{ + return false + } + // 成功 + // 查询到 有这个app启动项 + } catch (error) { + // 没有查询到该app启动项目 + return false + } +} function createWindow(page: string, display: any) { const win = new BrowserWindow({ @@ -64,7 +128,21 @@ async function launch() { globalShortcut.register('F11', () => { return }) } -app.whenReady().then(launch) +async function main() { + // 异步代码 + const checkReault: any = await checkLaunchEnv() + console.log('env right:', checkReault) + + // 异步代码执行完毕后执行的代码 + if (checkReault) { + launch() + } else { + dialog.showErrorBox('系统提示', '软件启动出错,请联系售后技术支持人员') + process.exit(1) + } +} + +app.whenReady().then(main) app.on('window-all-closed', () => { if (process.platform !== 'darwin') {