如何从 Windows 上下文菜单启动 Electron-app

Posted

技术标签:

【中文标题】如何从 Windows 上下文菜单启动 Electron-app【英文标题】:How to launch Electron-app from the Windows context menu 【发布时间】:2021-02-14 19:51:14 【问题描述】:

我正在开发一个 Windows 桌面应用程序。它是一个Electron 应用程序,使用electron-builder 来创建应用程序包。 electron-builder 的 NSIS 配置用于创建应用程序的安装程序。

我已经对安装程序进行了编程以将密钥添加到注册表中,以便在右键单击文件夹背景时可以从 Windows 上下文菜单中启动应用程序。

但是当应用程序从 Windows 上下文菜单启动时发生 javascript 错误。JavaScript Error image

但是当安装目录的路径写入环境变量时,应用程序可以从Windows上下文菜单成功启动(没有任何错误)。

我想从 Windows 上下文菜单启动我的 Electron 应用程序,而不写入环境变量。有没有办法做到这一点 ?提前致谢。

【问题讨论】:

不要使用相对路径 @Anders 你能解释一下你的答案吗?我没有在安装程序脚本中使用相对路径将密钥添加到注册表。我是这方面的初学者。如果我误解了您的回答,我们深表歉意。 不在安装程序中,在您的应用程序中。 Explorer 可能会将应用的工作目录设置为用户单击的路径。 @Anders 谢谢。经过一些调试发现由于您提到的原因而发生JavaScript错误。但是应用程序依赖于相对路径并且必须从安装目录运行。是否可以更改使用电子启动进程的可执行文件的工作目录?提前致谢 【参考方案1】:

应用程序不应依赖当前目录与 .exe 所在目录相同,这不是当前目录概念存在的原因!

当前目录可以通过 shell 设置为其他路径(上下文菜单、“打开方式”、“发送到”、open associated file 等)、open/save common dialogs、快捷方式 (.lnk)、Start:Run 和来自 cmd.exe(call ..\myapp.exe 等)的调用。

理想情况下,您应该使用正在加载的文件的完整路径来修复您的应用程序。我假设 Electron 能够告诉你它自己的 .exe 所在的位置。

If you can't do that,您可以使用某种强制当前目录的启动器。

一个批处理文件:

@echo off
setlocal ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
REM This will only work on Win2000 and later probably
cd /D "%~0\..\" 2>nul
pushd "%~0\..\"
"%~0\..\mybrokenapp.exe" %*

或 NSIS 应用程序:

OutFile applauncher.exe
RequestExecutionLevel user
SilentInstall silent
AutoCloseWindow true
!include "FileFunc.nsh"
Section
$GetParameters $1
SetOutPath $EXEDIR
ExecWait '"$EXEDIR\mybrokenapp.exe" $1' $0
SetErrorLevel $0
Quit
SectionEnd

更改当前目录的启动器的问题是it breaks callers that pass a relative path on the command line: applauncher.exe .\somefile.ext

【讨论】:

以上是关于如何从 Windows 上下文菜单启动 Electron-app的主要内容,如果未能解决你的问题,请参考以下文章

我应该使用什么命令来使用Windows注册表从上下文菜单中启动jar文件?

PyQt5:如何从系统托盘图标上下文菜单启动窗口?

如何在 Windows 11 的 Windows 资源管理器中添加“Git Bash Here”上下文菜单选项?

如何将 Windows 终端添加到 Windows 10 上的上下文菜单? [关闭]

在 SharpShell 从上下文菜单启动的程序中继承正确的 app.config

集成到 Windows 资源管理器上下文菜单中