我使用Electron创建了一个应用,并将其与electron-builder
.exe
文件捆绑在一起。
当我运行生成的可执行文件时,应用程序以electron-builder
使用的默认安装GIF启动,如预期的那样。
GIF完成后,应用程序重新启动并正常运行。它甚至出现在控制面板的程序列表中。
但是,如果我在开始菜单应用程序中查找它,它就不存在(并且按名称搜索它只返回上述.exe
安装程序)。
因此,一旦关闭应用程序,打开它的唯一方法是再次运行安装程序。
为什么会这样?有没有办法让它与其他程序一起出现?
答案 0 :(得分:1)
电子制造商安装程序(和electron-windows-installer)使用Squirrel来处理安装。 Squirrel在安装时使用您需要处理的参数启动应用程序。可以在windows installer github docs
上找到一个示例处理松鼠事件
Squirrel将在首次运行,更新和卸载时使用命令行标志生成您的应用程序。您的应用程序尽早处理这些事件非常重要,并在处理完毕后立即退出。松鼠会给你的应用程序一小段时间(约15秒)来应用这些操作并退出。
electronic-squirrel-startup模块将为您处理最常见的事件,例如管理桌面快捷方式。只需在main.js的顶部添加以下内容即可:
if (require('electron-squirrel-startup')) return;
您应该在应用的主要切入点处理这些事件,例如:
const app = require('app'); // this should be placed at top of main.js to handle setup events quickly if (handleSquirrelEvent()) { // squirrel event handled and app will exit in 1000ms, so don't do anything else return; } function handleSquirrelEvent() { if (process.argv.length === 1) { return false; } const ChildProcess = require('child_process'); const path = require('path'); const appFolder = path.resolve(process.execPath, '..'); const rootAtomFolder = path.resolve(appFolder, '..'); const updateDotExe = path.resolve(path.join(rootAtomFolder, 'Update.exe')); const exeName = path.basename(process.execPath); const spawn = function(command, args) { let spawnedProcess, error; try { spawnedProcess = ChildProcess.spawn(command, args, {detached: true}); } catch (error) {} return spawnedProcess; }; const spawnUpdate = function(args) { return spawn(updateDotExe, args); }; const squirrelEvent = process.argv[1]; switch (squirrelEvent) { case '--squirrel-install': case '--squirrel-updated': // Optionally do things such as: // - Add your .exe to the PATH // - Write to the registry for things like file associations and // explorer context menus // Install desktop and start menu shortcuts spawnUpdate(['--createShortcut', exeName]); setTimeout(app.quit, 1000); return true; case '--squirrel-uninstall': // Undo anything you did in the --squirrel-install and // --squirrel-updated handlers // Remove desktop and start menu shortcuts spawnUpdate(['--removeShortcut', exeName]); setTimeout(app.quit, 1000); return true; case '--squirrel-obsolete': // This is called on the outgoing version of your app before // we update to the new version - it's the opposite of // --squirrel-updated app.quit(); return true; } };
请注意,安装程序第一次启动您的应用时,您的应用会看到--squirrel-firstrun标志。这允许您执行诸如显示启动画面或显示设置UI之类的操作。另一件需要注意的事情是,由于应用程序是由松鼠产生的,而松鼠在安装过程中获得了文件锁定,因此在几天之后当松鼠释放锁定时,您无法成功检查应用程序更新。
在这个例子中,您可以看到它运行带有参数--create-shortcut的Update.exe(一个松鼠可执行文件),它添加了开始菜单和桌面快捷方式。
答案 1 :(得分:0)
现在是 2021 年,我仍然遇到非常相似的问题。 我的应用程序安装正确,并且使用上面的脚本,它还成功地将桌面链接添加到我的应用程序。 但是: Windows 开始菜单中没有添加快捷方式。 使用上面的脚本,这也应该添加到开始菜单中,对吗? 上面的一条评论说:
<块引用>// Install desktop and start menu shortcuts
spawnUpdate(['--createShortcut', exeName]);
我错过了什么?任何提示高度赞赏...