在Electron应用程序中的Squirrel事件中执行createShortcut

时间:2015-06-11 15:03:10

标签: node.js windows powershell electron

当我安装或更新它时,我正在尝试为我的Electron应用程序创建快捷方式,但是我在执行用于创建快捷方式的命令时遇到了一些问题。 默认情况下,Electron应用程序是“SquirrelAware”,因此我必须指定我想要创建快捷方式的位置。

我的问题与这个问题的接受答案有关。

Handle Squirrel's event on an Electron app

我尝试使用exec模块和child_process模块,但两者似乎都不起作用。我现在正在尝试(并且失败)启动PowerShell并在那里运行一个脚本,它将在我的“开始”菜单和“桌面”上创建快捷方式,但是我觉得这很长,并且必须有一个更简单的方法。

以下是我目前使用child_process模块​​和PowerShell的尝试:

 var spawn = require('child_process').spawn, child;
 child = spawn("C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",["C:\\ElectronSquirrelDemo\\AddAppShortcuts.ps1 -SourceExe "+ executionPath] );
                child.stdout.on('data', function(data){
                    console.log("PowerShell Data: " + data);
                });
                child.stdout.on('data', function(data){
                    console.log("PowerShell Error: " + data);
                });
                child.stdout.on('exit', function(){
                   console.log('PowerShell script finished'); 
                });

对此的任何帮助都将非常感激

1 个答案:

答案 0 :(得分:4)

我花了一些时间来了解自己如何做到这一点。 Squirrel.Windows Update.exe可以为您创建应用程序的快捷方式。我写了一篇名为Creating a Windows Distribution of an Electron App using Squirrel的博客文章,其中我有Squirrel为我创建快捷方式。如果你想走这条路,这是如何让Squirrel为你创建快捷方式的简化版本:

var cp = require('child_process');    
var updateDotExe = path.resolve(path.dirname(process.execPath), '..', 'update.exe');
var target = path.basename(process.execPath);
var child = cp.spawn(updateDotExe, ["--createShortcut", target], { detached: true });
child.on('close', function(code) {
    app.quit();
});

您需要使用Resource Hacker,rcedit或其他应用程序来破解电子可执行文件,以更改ProductName和Icon资源。您将要在安装和更新的Squirrel事件上调用上面的代码。