我是电子初学者,我的应用程序除了解压 zip 并启动 .bat 文件(它是一个安装程序)之外什么也不做,我需要用户提供数据库的 url,但当它返回时我进入 ipcMain:
{"sender":{"_windowOpenHandler":null,"ipc":{"_events":{},"_eventsCount":1,"_invokeHandlers":{}},"_events":{"render-process-gone":[null,null]},"_eventsCount":13},"frameId":1,"processId":4}
main.js:(不是整个文件只是处理)
ipcMain.handle('run-start', async (database) => {
console.log(`dbUrl in main.js:`, JSON.stringify(database), `Type:`, typeof database);
const command = path.join(filePath, 'dist', 'setup.bat') + ' ' + database
try {
console.log(command)
// const result = await new Promise((resolve, reject) => {
// exec(command, (error, stdout, stderr) => {
// if (error) {
// reject(`Error: ${stderr}`);
// } else {
// resolve(stdout);
// }
// });
// });
return result;
} catch (error) {
return error;
}
})
preload.js(整个文件):
const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('electron', {
selectFolder: () => ipcRenderer.invoke('select-folder'),
runInstall: (destDir) => ipcRenderer.invoke('run-install', destDir),
runStart: (dbUrl) => {ipcRenderer.invoke('run-start', dbUrl); console.log(dbUrl)}
});
index.html(只是单击的 btn 的处理程序):
document.getElementById('startButton').addEventListener('click', async () => {
console.log(dbUrl)
await window.electron.runStart(dbUrl)
alert('ClassyBooks is gestart!');
});
除了 main.js 之外,dbUrl 在任何地方都是正确的
ipcMain.handle
的回调有两个参数。
您尝试使用事件对象作为参数。
如果您不需要访问事件对象,请使用它:
ipcMain.handle('run-start', async (_, database) => {
// YOUR CODE
});