已安装Electron app但未出现在开始菜单中

时间:2016-06-23 19:39:07

标签: node.js build electron

我使用Electron创建了一个应用,并将其与electron-builder .exe文件捆绑在一起。

当我运行生成的可执行文件时,应用程序以electron-builder使用的默认安装GIF启动,如预期的那样。

Default installation GIF

GIF完成后,应用程序重新启动并正常运行。它甚至出现在控制面板的程序列表中

但是,如果我在开始菜单应用程序中查找它,它就不存在(并且按名称搜索它只返回上述.exe安装程序)。
因此,一旦关闭应用程序,打开它的唯一方法是再次运行安装程序。

为什么会这样?有没有办法让它与其他程序一起出现?

2 个答案:

答案 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]);

我错过了什么?任何提示高度赞赏...