|
@@ -11,9 +11,14 @@ import db from '../../database'
|
|
|
const path = require('path')
|
|
|
const ffi = require('ffi')
|
|
|
const fs = require('fs')
|
|
|
+const fse = require('fs-extra')
|
|
|
const electron = require('electron')
|
|
|
const ipcMain = electron.ipcMain
|
|
|
const dialog = electron.dialog
|
|
|
+const regeditPath64 = 'HKLM\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall'
|
|
|
+const regeditPath32 = 'HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall'
|
|
|
+const regeditPath = isOSWin64() ? regeditPath64 : regeditPath32
|
|
|
+const regedit = require('regedit')
|
|
|
|
|
|
const fileselect = function (win) {
|
|
|
ipcMain.on('file-select', function (event) {
|
|
@@ -27,7 +32,10 @@ const fileselect = function (win) {
|
|
|
} else {
|
|
|
let addnum = await checkExeName(files[0], data)
|
|
|
if (addnum !== 0) {
|
|
|
- event.sender.send('successUpdate', { id: '1', num: addnum, delnum: 0 })
|
|
|
+ let info = await db.read().get('sc_exeData').last().value()
|
|
|
+ await db.read().get('sc_productData').updateById(info.pid, { isshow: true }).write()
|
|
|
+ await db.read().set('sc_hadInstall.url', '/softwarestartup/' + info.pid).write()
|
|
|
+ event.sender.send('successUpdate', { id: info.pid, num: addnum, delnum: 0 })
|
|
|
} else {
|
|
|
event.sender.send('failedDirectory', { msg: '该文件夹中的纵横软件已存在启动器中' })
|
|
|
}
|
|
@@ -63,44 +71,65 @@ async function checkDirectory (files) {
|
|
|
|
|
|
/**
|
|
|
* 判断数据库是否已存在该文件信息,不存在则添加到数据库中
|
|
|
+ * @param Directory
|
|
|
* @param files
|
|
|
- * @return {Promise.<Array>}
|
|
|
+ * @return {Promise.<number>}
|
|
|
*/
|
|
|
async function checkExeName (Directory, files) {
|
|
|
let index = Directory.lastIndexOf('\\')
|
|
|
let filename = Directory.substring(index + 1, Directory.length)
|
|
|
let addnum = 0
|
|
|
+ let addflag = false
|
|
|
for (let i = 0; i < files.length; i++) {
|
|
|
let exeinfo = await db.read().get('sc_exeData').find({ path: Directory, exeName: files[i].exeName, fileVersion: files[i].FileVersion }).value()
|
|
|
if (!exeinfo) {
|
|
|
- let exeData = {
|
|
|
- path: Directory,
|
|
|
- name: filename,
|
|
|
- regeditName: '',
|
|
|
- fileName: filename,
|
|
|
- simpleName: '',
|
|
|
- versionName: '',
|
|
|
- fileVersion: files[i].FileVersion,
|
|
|
- productName: files[i].ProductName,
|
|
|
- productVersion: files[i].ProductVersion,
|
|
|
- fileDescription: files[i].FileDescription,
|
|
|
- exeName: files[i].exeName,
|
|
|
- pid: '1',
|
|
|
- keyNumber: '',
|
|
|
- keytype: '',
|
|
|
- addtime: Date.parse(new Date()) / 1000,
|
|
|
- isshow: true,
|
|
|
- auto: false
|
|
|
+ addflag = true
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (addflag) {
|
|
|
+ // 再和注册表内容对应,有则添加,无则为未分类
|
|
|
+ let regeditMsg = await checkRegeditbyDirectory(Directory)
|
|
|
+ await sleep(5000)
|
|
|
+ for (let i = 0; i < files.length; i++) {
|
|
|
+ let exeinfo = await db.read().get('sc_exeData').find({ path: Directory, exeName: files[i].exeName, fileVersion: files[i].FileVersion }).value()
|
|
|
+ if (!exeinfo) {
|
|
|
+ let exeData = {
|
|
|
+ path: Directory,
|
|
|
+ name: regeditMsg.name !== '' ? regeditMsg.name : filename,
|
|
|
+ regeditName: regeditMsg.regeditName,
|
|
|
+ fileName: regeditMsg.fileName !== '' ? regeditMsg.fileName : filename,
|
|
|
+ simpleName: regeditMsg.simpleName,
|
|
|
+ versionName: regeditMsg.versionName,
|
|
|
+ exeName: files[i].exeName,
|
|
|
+ fileVersion: files[i].FileVersion,
|
|
|
+ productName: files[i].ProductName,
|
|
|
+ productVersion: files[i].ProductVersion,
|
|
|
+ fileDescription: files[i].FileDescription,
|
|
|
+ pid: regeditMsg.pid,
|
|
|
+ keyNumber: regeditMsg.keyNumber,
|
|
|
+ keytype: regeditMsg.keytype,
|
|
|
+ product_id: regeditMsg.product_id,
|
|
|
+ down_id: regeditMsg.down_id,
|
|
|
+ product_version: regeditMsg.product_version,
|
|
|
+ show_tip: false,
|
|
|
+ show_updateVersion: regeditMsg.product_version,
|
|
|
+ addtime: Date.parse(new Date()) / 1000,
|
|
|
+ isshow: true,
|
|
|
+ auto: false
|
|
|
+ }
|
|
|
+ await db.read().get('sc_exeData').insert(exeData).write()
|
|
|
+ ++addnum
|
|
|
}
|
|
|
- await db.read().get('sc_exeData').insert(exeData).write()
|
|
|
- await db.read().get('sc_productData').updateById(1, { isshow: true }).write()
|
|
|
- await db.read().set('sc_hadInstall.url', '/softwarestartup/1').write()
|
|
|
- ++addnum
|
|
|
}
|
|
|
}
|
|
|
return addnum
|
|
|
}
|
|
|
|
|
|
+const sleep = (timeout = 2000) => new Promise(resolve => {
|
|
|
+ setTimeout(resolve, timeout)
|
|
|
+})
|
|
|
+
|
|
|
/**
|
|
|
* 判断文件名是否包含纵横软件exe的部分名称
|
|
|
* @param item
|
|
@@ -119,4 +148,102 @@ function existSoftwareName (item) {
|
|
|
return flag
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * 纵横注册表信息中是否存在该文件夹,存在则返回该注册表信息,并加入到产品数据库中
|
|
|
+ * @param directory
|
|
|
+ * @return {{name: string, regeditName: string, simpleName: string, versionName: string, pid: string, keyNumber: string, keytype: string}}
|
|
|
+ */
|
|
|
+async function checkRegeditbyDirectory (directory) {
|
|
|
+ let regeditMsg = {
|
|
|
+ name: '',
|
|
|
+ fileName: '',
|
|
|
+ regeditName: '',
|
|
|
+ simpleName: '',
|
|
|
+ versionName: '',
|
|
|
+ pid: '1',
|
|
|
+ keyNumber: '',
|
|
|
+ keytype: '',
|
|
|
+ product_id: '',
|
|
|
+ down_id: '',
|
|
|
+ product_version: ''
|
|
|
+ }
|
|
|
+ regedit.list(regeditPath).on('data', async function (result) {
|
|
|
+ try {
|
|
|
+ let softwarelist = result.data.keys
|
|
|
+ for (let i in softwarelist) {
|
|
|
+ if (softwarelist[i].indexOf('SmartCost_') !== -1) {
|
|
|
+ regedit.list(regeditPath + '\\' + softwarelist[i]).on('data', async function (result2) {
|
|
|
+ let values = result2.data.values
|
|
|
+ let directoryPath = values['Inno Setup: App Path'].value
|
|
|
+ if (directoryPath === directory) {
|
|
|
+ let simpleVersion = values['DisplayVersion'] === undefined || values['DisplayVersion'] === null ? '' : values['DisplayVersion'].value.split('_')
|
|
|
+ regeditMsg.name = values['DisplayName'].value
|
|
|
+ regeditMsg.fileName = values['Inno Setup: Icon Group'].value
|
|
|
+ regeditMsg.regeditName = softwarelist[i]
|
|
|
+ regeditMsg.simpleName = simpleVersion === '' ? '' : simpleVersion[0]
|
|
|
+ regeditMsg.versionName = simpleVersion === '' ? '' : simpleVersion[1]
|
|
|
+ let softwarejson = path.join('data/sc_software.json')
|
|
|
+ let downlist = fse.readJsonSync(softwarejson).sc_down
|
|
|
+ let downinfo = downlist.find(function (item) {
|
|
|
+ return item.regedit === regeditMsg.regeditName
|
|
|
+ })
|
|
|
+ let ptitle = downinfo !== undefined ? downinfo.product_title : regeditMsg.simpleName
|
|
|
+ // 查找数据库是否存在该产品,有则添加,无则根据simplename 新增产品,simplename为空的话,则为未分类
|
|
|
+ // 新方法,先关联注册表名查找数据,然后再关联产品数据库生成
|
|
|
+ if (ptitle !== '') {
|
|
|
+ if (regeditMsg.simpleName === '') {
|
|
|
+ regeditMsg.simpleName = downinfo.product_title
|
|
|
+ regeditMsg.versionName = downinfo.title
|
|
|
+ }
|
|
|
+ let productInfo = db.read().get('sc_productData').find({ title: ptitle }).value()
|
|
|
+ if (productInfo !== undefined) {
|
|
|
+ regeditMsg.pid = productInfo.id
|
|
|
+ regeditMsg.product_version = productInfo.version
|
|
|
+ } else {
|
|
|
+ // 查找sc_software.json文件,有则新增产品,无则为未分类(旧的也会归这类)
|
|
|
+ let scproductlist = fse.readJsonSync(softwarejson).sc_product
|
|
|
+ let scproductinfo = scproductlist.find(function (item) {
|
|
|
+ return item.title === ptitle
|
|
|
+ })
|
|
|
+ if (scproductinfo !== undefined) {
|
|
|
+ let addproduct = scproductinfo
|
|
|
+ addproduct.addtime = Date.parse(new Date()) / 1000
|
|
|
+ addproduct.isshow = false
|
|
|
+ let info = db.read().get('sc_productData').insert(addproduct).write()
|
|
|
+ regeditMsg.pid = info.id
|
|
|
+ regeditMsg.product_version = info.version
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 锁号和锁类型添加
|
|
|
+ // let downlist = fse.readJsonSync(softwarejson).sc_down
|
|
|
+ // let downinfo = downlist.find(function (item) {
|
|
|
+ // return item.product_title === regeditMsg.simpleName && item.title === regeditMsg.versionName
|
|
|
+ // })
|
|
|
+ if (downinfo !== undefined) {
|
|
|
+ regeditMsg.keyNumber = downinfo.key_number
|
|
|
+ regeditMsg.keytype = downinfo.keytype
|
|
|
+ regeditMsg.product_id = downinfo.product_id
|
|
|
+ regeditMsg.down_id = downinfo.down_id
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return regeditMsg
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (err) {
|
|
|
+ console.log(err)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ return regeditMsg
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 判断系统位数
|
|
|
+ * @return {boolean}
|
|
|
+ */
|
|
|
+function isOSWin64 () {
|
|
|
+ return process.arch === 'x64' || process.env.hasOwnProperty('PROCESSOR_ARCHITEW6432')
|
|
|
+}
|
|
|
+
|
|
|
export default fileselect
|