| is-elevated不兼容导致的错误,两种修法 
 is-elevated使用中CommonJS/ESM不兼容导致的错误,两种修法   
 这是 CommonJS/ESM 不兼容导致的。is-elevated 新版是 ESM-only,不能用 require()。两种修法: 方案A:改成动态 import(保留 CommonJS) 
 方案B:改用 CommonJS 版本的 is-elevated复制代码// main.js(主进程)
const { app } = require('electron');
const { spawn } = require('child_process');
async function relaunchAsAdminIfNeeded() {
  if (process.platform !== 'win32') return;
  // ESM 动态导入
  const { default: isElevated } = await import('is-elevated');
  if (await isElevated()) return;
  const args = process.argv.slice(1).map(a => `"${a.replace(/"/g, '\"')}"`).join(' ');
  const ps = [
    '-NoProfile','-ExecutionPolicy','Bypass','-Command',
    `Start-Process -FilePath "${process.execPath}" -ArgumentList '${args.replace(/'/g,"''")}' -Verb RunAs`
  ];
  spawn('powershell.exe', ps, { detached: true, windowsHide: true });
  app.quit();
}
app.whenReady().then(relaunchAsAdminIfNeeded).catch(console.error);
process.on('unhandledRejection', console.error);
然后继续用:
 复制代码const isElevated = require('is-elevated'); // 返回 Promise<boolean>
复制代码// ...existing code...
const { app, BrowserWindow } = require('electron');
const { spawn } = require('child_process');
const isElevated = require('is-elevated'); // 关键:引入
async function relaunchAsAdminIfNeeded() {
  if (process.platform !== 'win32') return;
  if (await isElevated()) return;
  const args = process.argv.slice(1).map(a => `"${a.replace(/"/g, '\"')}"`).join(' ');
  const ps = [
    '-NoProfile', '-ExecutionPolicy', 'Bypass', '-Command',
    `Start-Process -FilePath "${process.execPath}" -ArgumentList '${args.replace(/'/g, "''")}' -Verb RunAs`
  ];
  spawn('powershell.exe', ps, { detached: true, windowsHide: true });
  app.quit();
}
app.whenReady()
  .then(() => relaunchAsAdminIfNeeded())
  .catch(err => console.error('elevate failed:', err));
// 可选:兜底,避免未处理的 Promise 报警
process.on('unhandledRejection', err => console.error(err));
// ...existing code...
备注 不要在 CommonJS 里用 import 静态语法,需用动态 import() 或把整个项目改成 ESM(package.json 加 "type":"module")。
 
 |