From 197c9d3af88bcf1bbb003aabb815ce0595ee8375 Mon Sep 17 00:00:00 2001 From: xmk23333 Date: Mon, 19 Jan 2026 13:14:54 +0800 Subject: [PATCH] feat: add Windows 7 compatibility build using win7 target --- .github/workflows/build.yml | 2 ++ scripts/prepare.mjs | 6 ++++-- src/native/sysproxy/index.js | 13 +++++++++++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1f7f475..84f7239 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -205,6 +205,8 @@ jobs: GITHUB_EVENT_NAME: workflow_dispatch run: node scripts/update-version.mjs - name: Prepare + env: + LEGACY_BUILD: 'true' run: pnpm prepare --${{ matrix.arch }} - name: Build env: diff --git a/scripts/prepare.mjs b/scripts/prepare.mjs index 8753398..52838fb 100644 --- a/scripts/prepare.mjs +++ b/scripts/prepare.mjs @@ -332,11 +332,13 @@ function getSysproxyNodeName() { } })() + const isWin7Build = process.env.LEGACY_BUILD === 'true' + switch (platform) { case 'win32': - if (arch === 'x64') return 'sysproxy.win32-x64-msvc.node' + if (arch === 'x64') return isWin7Build ? 'sysproxy.win32-x64-msvc-win7.node' : 'sysproxy.win32-x64-msvc.node' if (arch === 'arm64') return 'sysproxy.win32-arm64-msvc.node' - if (arch === 'ia32') return 'sysproxy.win32-ia32-msvc.node' + if (arch === 'ia32') return isWin7Build ? 'sysproxy.win32-ia32-msvc-win7.node' : 'sysproxy.win32-ia32-msvc.node' break case 'darwin': if (arch === 'x64') return 'sysproxy.darwin-x64.node' diff --git a/src/native/sysproxy/index.js b/src/native/sysproxy/index.js index 5b10653..3c6d4a3 100644 --- a/src/native/sysproxy/index.js +++ b/src/native/sysproxy/index.js @@ -1,11 +1,19 @@ const { existsSync } = require('fs') const { join, dirname } = require('path') +const os = require('os') const { platform, arch } = process let nativeBinding = null let loadError = null +function isWindows7() { + if (platform !== 'win32') return false + const release = os.release() + // Windows 7 is NT 6.1 + return release.startsWith('6.1') +} + function isMusl() { // 优先使用 process.report(Node.js 12+,最可靠) if (process.report && typeof process.report.getReport === 'function') { @@ -23,10 +31,11 @@ function isMusl() { } function getBindingName() { + const win7 = isWindows7() switch (platform) { case 'win32': - if (arch === 'x64') return 'sysproxy.win32-x64-msvc.node' - if (arch === 'ia32') return 'sysproxy.win32-ia32-msvc.node' + if (arch === 'x64') return win7 ? 'sysproxy.win32-x64-msvc-win7.node' : 'sysproxy.win32-x64-msvc.node' + if (arch === 'ia32') return win7 ? 'sysproxy.win32-ia32-msvc-win7.node' : 'sysproxy.win32-ia32-msvc.node' if (arch === 'arm64') return 'sysproxy.win32-arm64-msvc.node' break case 'darwin':