diff --git a/napiloader/napiLoader-debug.bat b/napiloader/napiLoader-debug.bat new file mode 100644 index 00000000..89f66bd3 --- /dev/null +++ b/napiloader/napiLoader-debug.bat @@ -0,0 +1,30 @@ +@echo off +chcp 65001 +set NAPCAT_INJECT_PATH=%cd%\napiloader.dll +set NAPCAT_LAUNCHER_PATH=%cd%\napimain.exe +set NAPCAT_MAIN_PATH=%cd%\nativeLoader.cjs +set NAPCAT_DEBUG_CONSOLE=1 +:loop_read +for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ" /v "UninstallString"') do ( + set "RetString=%%~b" + goto :napcat_boot +) + +:napcat_boot +for %%a in ("%RetString%") do ( + set "pathWithoutUninstall=%%~dpa" +) + +set "QQPath=%pathWithoutUninstall%QQ.exe" + +if not exist "%QQpath%" ( + echo provided QQ path is invalid + pause + exit /b +) + +set NAPCAT_MAIN_PATH=%NAPCAT_MAIN_PATH:\=/% + +"%NAPCAT_LAUNCHER_PATH%" "%QQPath%" "%NAPCAT_INJECT_PATH%" "%NAPCAT_MAIN_PATH%" + +pause \ No newline at end of file diff --git a/napiloader/napiLoader.bat b/napiloader/napiLoader.bat new file mode 100644 index 00000000..7fecb175 --- /dev/null +++ b/napiloader/napiLoader.bat @@ -0,0 +1,27 @@ +@echo off +chcp 65001 +set NAPCAT_INJECT_PATH=%cd%\napiloader.dll +set NAPCAT_LAUNCHER_PATH=%cd%\napimain.exe +set NAPCAT_MAIN_PATH=%cd%\nativeLoader.cjs +:loop_read +for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ" /v "UninstallString"') do ( + set "RetString=%%~b" + goto :napcat_boot +) + +:napcat_boot +for %%a in ("%RetString%") do ( + set "pathWithoutUninstall=%%~dpa" +) + +set "QQPath=%pathWithoutUninstall%QQ.exe" + +if not exist "%QQpath%" ( + echo provided QQ path is invalid + pause + exit /b +) + +set NAPCAT_MAIN_PATH=%NAPCAT_MAIN_PATH:\=/% + +start "" "%NAPCAT_LAUNCHER_PATH%" "%QQPath%" "%NAPCAT_INJECT_PATH%" "%NAPCAT_MAIN_PATH%" \ No newline at end of file diff --git a/napiloader/napiloader.dll b/napiloader/napiloader.dll new file mode 100644 index 00000000..31dbe435 Binary files /dev/null and b/napiloader/napiloader.dll differ diff --git a/napiloader/napimain.exe b/napiloader/napimain.exe new file mode 100644 index 00000000..59823098 Binary files /dev/null and b/napiloader/napimain.exe differ diff --git a/vite.config.ts b/vite.config.ts index 86add854..b7e30c1f 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -6,204 +6,205 @@ import { builtinModules } from 'module'; import { performanceMonitorPlugin } from './vite-plugin-performance-monitor'; //依赖排除 const external = [ - 'silk-wasm', - 'ws', - 'express' + 'silk-wasm', + 'ws', + 'express' ]; const nodeModules = [...builtinModules, builtinModules.map((m) => `node:${m}`)].flat(); let startScripts: string[] | undefined = undefined; if (process.env.NAPCAT_BUILDSYS == 'linux') { - startScripts = []; + startScripts = []; } else if (process.env.NAPCAT_BUILDSYS == 'win32') { - startScripts = ['./script/KillQQ.bat']; + startScripts = ['./script/KillQQ.bat']; } else { - startScripts = ['./script/KillQQ.bat']; + startScripts = ['./script/KillQQ.bat']; } const UniversalBaseConfigPlugin: PluginOption[] = [ - // performanceMonitorPlugin({ - // enabled: process.env.NODE_ENV !== 'production', - // exclude: [/node_modules/, /\.min\./, /performance-monitor/], - // include: [/\.ts$/, /\.js$/] - // }), - cp({ - targets: [ - { src: './manifest.json', dest: 'dist' }, - { src: './src/core/external/napcat.json', dest: 'dist/config/' }, - { src: './src/native/', dest: 'dist/native', flatten: false }, - { src: './napcat.webui/dist/', dest: 'dist/static/', flatten: false }, - { src: './src/framework/liteloader.cjs', dest: 'dist' }, - { src: './src/framework/napcat.cjs', dest: 'dist' }, - { src: './src/framework/preload.cjs', dest: 'dist' }, - { src: './src/framework/renderer.js', dest: 'dist' }, - { src: './package.json', dest: 'dist' }, - { src: './logo.png', dest: 'dist' }, - { src: './launcher/', dest: 'dist', flatten: true }, - ...startScripts.map((startScript) => { - return { src: startScript, dest: 'dist' }; - }), - ], - }), - nodeResolve(), + // performanceMonitorPlugin({ + // enabled: process.env.NODE_ENV !== 'production', + // exclude: [/node_modules/, /\.min\./, /performance-monitor/], + // include: [/\.ts$/, /\.js$/] + // }), + cp({ + targets: [ + { src: './manifest.json', dest: 'dist' }, + { src: './src/core/external/napcat.json', dest: 'dist/config/' }, + { src: './src/native/', dest: 'dist/native', flatten: false }, + { src: './napcat.webui/dist/', dest: 'dist/static/', flatten: false }, + { src: './src/framework/liteloader.cjs', dest: 'dist' }, + { src: './src/framework/napcat.cjs', dest: 'dist' }, + { src: './src/framework/preload.cjs', dest: 'dist' }, + { src: './src/framework/renderer.js', dest: 'dist' }, + { src: './package.json', dest: 'dist' }, + { src: './logo.png', dest: 'dist' }, + { src: './launcher/', dest: 'dist', flatten: true }, + ...startScripts.map((startScript) => { + return { src: startScript, dest: 'dist' }; + }), + ], + }), + nodeResolve(), ]; const FrameworkBaseConfigPlugin: PluginOption[] = [ - // performanceMonitorPlugin({ - // enabled: process.env.NODE_ENV !== 'production', - // exclude: [/node_modules/, /\.min\./, /performance-monitor/], - // include: [/\.ts$/, /\.js$/] - // }), - cp({ - targets: [ - { src: './src/native/', dest: 'dist/native', flatten: false }, - { src: './manifest.json', dest: 'dist' }, - { src: './src/core/external/napcat.json', dest: 'dist/config/' }, - { src: './napcat.webui/dist/', dest: 'dist/static/', flatten: false }, - { src: './src/framework/liteloader.cjs', dest: 'dist' }, - { src: './src/framework/napcat.cjs', dest: 'dist' }, - { src: './src/framework/nativeLoader.cjs', dest: 'dist' }, - { src: './src/framework/preload.cjs', dest: 'dist' }, - { src: './src/framework/renderer.js', dest: 'dist' }, - { src: './package.json', dest: 'dist' }, - { src: './logo.png', dest: 'dist' }, - ], - }), - nodeResolve(), + // performanceMonitorPlugin({ + // enabled: process.env.NODE_ENV !== 'production', + // exclude: [/node_modules/, /\.min\./, /performance-monitor/], + // include: [/\.ts$/, /\.js$/] + // }), + cp({ + targets: [ + { src: './napiloader/', dest: 'dist', flatten: true }, + { src: './src/native/', dest: 'dist/native', flatten: false }, + { src: './manifest.json', dest: 'dist' }, + { src: './src/core/external/napcat.json', dest: 'dist/config/' }, + { src: './napcat.webui/dist/', dest: 'dist/static/', flatten: false }, + { src: './src/framework/liteloader.cjs', dest: 'dist' }, + { src: './src/framework/napcat.cjs', dest: 'dist' }, + { src: './src/framework/nativeLoader.cjs', dest: 'dist' }, + { src: './src/framework/preload.cjs', dest: 'dist' }, + { src: './src/framework/renderer.js', dest: 'dist' }, + { src: './package.json', dest: 'dist' }, + { src: './logo.png', dest: 'dist' }, + ], + }), + nodeResolve(), ]; const ShellBaseConfigPlugin: PluginOption[] = [ - // performanceMonitorPlugin({ - // enabled: process.env.NODE_ENV !== 'production', - // exclude: [/node_modules/, /\.min\./, /performance-monitor/], - // include: [/\.ts$/, /\.js$/] - // }), - cp({ - targets: [ - { src: './src/native/', dest: 'dist/native', flatten: false }, - { src: './napcat.webui/dist/', dest: 'dist/static/', flatten: false }, - { src: './src/core/external/napcat.json', dest: 'dist/config/' }, - { src: './package.json', dest: 'dist' }, - { src: './launcher/', dest: 'dist', flatten: true }, - ...startScripts.map((startScript) => { - return { src: startScript, dest: 'dist' }; - }), - ], - }), - nodeResolve(), + // performanceMonitorPlugin({ + // enabled: process.env.NODE_ENV !== 'production', + // exclude: [/node_modules/, /\.min\./, /performance-monitor/], + // include: [/\.ts$/, /\.js$/] + // }), + cp({ + targets: [ + { src: './src/native/', dest: 'dist/native', flatten: false }, + { src: './napcat.webui/dist/', dest: 'dist/static/', flatten: false }, + { src: './src/core/external/napcat.json', dest: 'dist/config/' }, + { src: './package.json', dest: 'dist' }, + { src: './launcher/', dest: 'dist', flatten: true }, + ...startScripts.map((startScript) => { + return { src: startScript, dest: 'dist' }; + }), + ], + }), + nodeResolve(), ]; const UniversalBaseConfig = () => - defineConfig({ - resolve: { - conditions: ['node', 'default'], - alias: { - '@/core': resolve(__dirname, './src/core'), - '@': resolve(__dirname, './src'), - '@webapi': resolve(__dirname, './src/webui/src'), - }, + defineConfig({ + resolve: { + conditions: ['node', 'default'], + alias: { + '@/core': resolve(__dirname, './src/core'), + '@': resolve(__dirname, './src'), + '@webapi': resolve(__dirname, './src/webui/src'), + }, + }, + build: { + sourcemap: false, + target: 'esnext', + minify: false, + lib: { + entry: { + napcat: 'src/universal/napcat.ts', + 'audio-worker': 'src/common/audio-worker.ts', + 'worker/conoutSocketWorker': 'src/pty/worker/conoutSocketWorker.ts', }, - build: { - sourcemap: false, - target: 'esnext', - minify: false, - lib: { - entry: { - napcat: 'src/universal/napcat.ts', - 'audio-worker': 'src/common/audio-worker.ts', - 'worker/conoutSocketWorker': 'src/pty/worker/conoutSocketWorker.ts', - }, - formats: ['es'], - fileName: (_, entryName) => `${entryName}.mjs`, - }, - rollupOptions: { - external: [...nodeModules, ...external], - }, - }, - }); + formats: ['es'], + fileName: (_, entryName) => `${entryName}.mjs`, + }, + rollupOptions: { + external: [...nodeModules, ...external], + }, + }, + }); const ShellBaseConfig = () => - defineConfig({ - resolve: { - conditions: ['node', 'default'], - alias: { - '@/core': resolve(__dirname, './src/core'), - '@': resolve(__dirname, './src'), - '@webapi': resolve(__dirname, './src/webui/src'), - }, + defineConfig({ + resolve: { + conditions: ['node', 'default'], + alias: { + '@/core': resolve(__dirname, './src/core'), + '@': resolve(__dirname, './src'), + '@webapi': resolve(__dirname, './src/webui/src'), + }, + }, + build: { + sourcemap: false, + target: 'esnext', + minify: false, + lib: { + entry: { + napcat: 'src/shell/napcat.ts', + 'audio-worker': 'src/common/audio-worker.ts', + 'worker/conoutSocketWorker': 'src/pty/worker/conoutSocketWorker.ts', }, - build: { - sourcemap: false, - target: 'esnext', - minify: false, - lib: { - entry: { - napcat: 'src/shell/napcat.ts', - 'audio-worker': 'src/common/audio-worker.ts', - 'worker/conoutSocketWorker': 'src/pty/worker/conoutSocketWorker.ts', - }, - formats: ['es'], - fileName: (_, entryName) => `${entryName}.mjs`, - }, - rollupOptions: { - external: [...nodeModules, ...external], - }, - }, - }); + formats: ['es'], + fileName: (_, entryName) => `${entryName}.mjs`, + }, + rollupOptions: { + external: [...nodeModules, ...external], + }, + }, + }); const FrameworkBaseConfig = () => - defineConfig({ - resolve: { - conditions: ['node', 'default'], - alias: { - '@/core': resolve(__dirname, './src/core'), - '@': resolve(__dirname, './src'), - '@webapi': resolve(__dirname, './src/webui/src'), - }, + defineConfig({ + resolve: { + conditions: ['node', 'default'], + alias: { + '@/core': resolve(__dirname, './src/core'), + '@': resolve(__dirname, './src'), + '@webapi': resolve(__dirname, './src/webui/src'), + }, + }, + build: { + sourcemap: false, + target: 'esnext', + minify: false, + lib: { + entry: { + napcat: 'src/framework/napcat.ts', + 'audio-worker': 'src/common/audio-worker.ts', + 'worker/conoutSocketWorker': 'src/pty/worker/conoutSocketWorker.ts', }, - build: { - sourcemap: false, - target: 'esnext', - minify: false, - lib: { - entry: { - napcat: 'src/framework/napcat.ts', - 'audio-worker': 'src/common/audio-worker.ts', - 'worker/conoutSocketWorker': 'src/pty/worker/conoutSocketWorker.ts', - }, - formats: ['es'], - fileName: (_, entryName) => `${entryName}.mjs`, - }, - rollupOptions: { - external: [...nodeModules, ...external], - }, - }, - }); + formats: ['es'], + fileName: (_, entryName) => `${entryName}.mjs`, + }, + rollupOptions: { + external: [...nodeModules, ...external], + }, + }, + }); export default defineConfig(({ mode }): UserConfig => { - if (mode === 'shell') { - return { - ...ShellBaseConfig(), - plugins: [...ShellBaseConfigPlugin], - }; - } else if (mode == 'universal') { - return { - ...UniversalBaseConfig(), - plugins: [...UniversalBaseConfigPlugin], - }; - } else if (mode == 'shell-analysis') { - return { - ...ShellBaseConfig(), - plugins: [ - performanceMonitorPlugin({ - exclude: [/node_modules/, /\.min\./, /performance-monitor\.ts$/, /packet/], - include: [/\.ts$/, /\.js$/] - }), - ...ShellBaseConfigPlugin - ], - }; - } else - return { - ...FrameworkBaseConfig(), - plugins: [...FrameworkBaseConfigPlugin], - }; + if (mode === 'shell') { + return { + ...ShellBaseConfig(), + plugins: [...ShellBaseConfigPlugin], + }; + } else if (mode == 'universal') { + return { + ...UniversalBaseConfig(), + plugins: [...UniversalBaseConfigPlugin], + }; + } else if (mode == 'shell-analysis') { + return { + ...ShellBaseConfig(), + plugins: [ + performanceMonitorPlugin({ + exclude: [/node_modules/, /\.min\./, /performance-monitor\.ts$/, /packet/], + include: [/\.ts$/, /\.js$/] + }), + ...ShellBaseConfigPlugin + ], + }; + } else + return { + ...FrameworkBaseConfig(), + plugins: [...FrameworkBaseConfigPlugin], + }; });