mirror of
https://wget.la/https://github.com/Wxw-Gu/WechatExplorer
synced 2026-08-18 20:19:09 +08:00
- 新增微信账号发现、环境诊断和分步数据库连接引导 - 支持按账号安全保存数据库密钥及快速切换账号 - 完善 WCDB 历史消息分片读取和分页状态提示 - 支持导出图片、视频和语音,提供原图优先及缩略图回退 - 更新安装指引、兼容版本说明和相关自动化测试
70 lines
2.4 KiB
TypeScript
70 lines
2.4 KiB
TypeScript
import { execFile } from 'child_process'
|
||
import fs from 'fs-extra'
|
||
import os from 'os'
|
||
import path from 'path'
|
||
import { promisify } from 'util'
|
||
import { isUsableDbRoot } from './settings-store'
|
||
|
||
const execFileAsync = promisify(execFile)
|
||
|
||
const platformLabel = (): string => {
|
||
if (process.platform === 'win32') return `Windows ${os.release()} (${process.arch})`
|
||
if (process.platform === 'darwin') return `macOS ${os.release()} (${process.arch})`
|
||
return `${process.platform} ${os.release()} (${process.arch})`
|
||
}
|
||
|
||
async function detectWindowsWechatVersion(): Promise<string> {
|
||
const script = [
|
||
'$process = Get-Process Weixin,WeChat -ErrorAction SilentlyContinue | Where-Object Path | Select-Object -First 1',
|
||
'$candidate = if ($process) { $process.Path } else {',
|
||
" @($env:ProgramFiles, ${env:ProgramFiles(x86)}) | Where-Object { $_ } | ForEach-Object { Join-Path $_ 'Tencent\\WeChat\\WeChat.exe' } | Where-Object { Test-Path $_ } | Select-Object -First 1",
|
||
'}',
|
||
'if ($candidate) { (Get-Item -LiteralPath $candidate).VersionInfo.ProductVersion }'
|
||
].join('; ')
|
||
try {
|
||
const { stdout } = await execFileAsync(
|
||
'powershell.exe',
|
||
['-NoProfile', '-NonInteractive', '-Command', script],
|
||
{ timeout: 3000, windowsHide: true }
|
||
)
|
||
return stdout.trim() || '未检测到'
|
||
} catch {
|
||
return '未检测到'
|
||
}
|
||
}
|
||
|
||
async function detectMacWechatVersion(): Promise<string> {
|
||
const candidates = [
|
||
'/Applications/WeChat.app/Contents/Info',
|
||
path.join(os.homedir(), 'Applications/WeChat.app/Contents/Info')
|
||
]
|
||
for (const candidate of candidates) {
|
||
if (!fs.existsSync(`${candidate}.plist`)) continue
|
||
try {
|
||
const { stdout } = await execFileAsync(
|
||
'/usr/bin/defaults',
|
||
['read', candidate, 'CFBundleShortVersionString'],
|
||
{ timeout: 3000 }
|
||
)
|
||
if (stdout.trim()) return stdout.trim()
|
||
} catch {
|
||
// Continue to the next known installation location.
|
||
}
|
||
}
|
||
return '未检测到'
|
||
}
|
||
|
||
export async function detectWechatVersion(): Promise<string> {
|
||
if (process.platform === 'win32') return detectWindowsWechatVersion()
|
||
if (process.platform === 'darwin') return detectMacWechatVersion()
|
||
return '未检测到'
|
||
}
|
||
|
||
export function detectDataStructureVersion(dbRoot: string): string {
|
||
return isUsableDbRoot(dbRoot) ? '微信 4.x(WCDB)' : '未检测到'
|
||
}
|
||
|
||
export function getOsVersionLabel(): string {
|
||
return platformLabel()
|
||
}
|