Как запустить Electron-приложение из контекстного меню Windows

#electron #nsis #electron-builder

#electron #nsis #electron-builder

Вопрос:

Я работаю над настольным приложением Windows. Это приложение Electron и использует electron-builder для создания пакета приложений. Конфигурации NSIS electron-builder используются для создания установщика приложения.

Я запрограммировал программу установки на добавление ключей в реестр, чтобы приложение можно было запускать из контекстного меню Windows при щелчке правой кнопкой мыши на фоне папки.

Но при запуске приложения из контекстного меню Windows возникает ошибка JavaScript.Изображение ошибки JavaScript

Однако, когда путь к каталогу установки записан в переменных среды, приложение может быть успешно запущено из контекстного меню Windows (без каких-либо ошибок).

Я хотел бы запустить свое электронное приложение из контекстного меню Windows без записи в переменные среды. Есть ли способ сделать это? Заранее спасибо.

Комментарии:

1. Не используйте относительные пути

2. @Anders Можете ли вы, пожалуйста, объяснить свой ответ? Я не использовал относительный путь в скрипте установщика для добавления ключей в реестр. Я новичок в этой области. Прошу прощения, если я неправильно понял ваш ответ.

3. Не в установщике, в вашем приложении. Вероятно, проводник устанавливает рабочий каталог вашего приложения на путь, по которому пользователь щелкнул.

4. @Anders Спасибо. После некоторой отладки обнаружилось, что ошибка JavaScript возникает по указанной вами причине. Однако приложение полагается на относительные пути и должно запускаться из каталога установки. Можно ли изменить рабочий каталог исполняемого файла, который запускает процесс с помощью electron? Заранее спасибо

Ответ №1:

Приложения не должны полагаться на то, что текущий каталог совпадает с каталогом, в котором находится .exe, это не причина, по которой существует концепция текущего каталога!

Оболочка может указать для текущего каталога другие пути (контекстные меню, «открыть с помощью», «отправить», открыть связанный файл и т. Д.), Открыть / сохранить общие диалоговые окна, ярлыки (.lnk), Пуск: Выполнить и вызовы из cmd.exe ( call ..myapp.exe и т.д.).

В идеале вы должны исправить свое приложение, используя полный путь к загружаемым файлам. Я предполагаю, что Electron может сообщить вам, где находится его собственный .exe.

Если вы не можете этого сделать, вы можете использовать какой-то лаунчер, который запускает текущий каталог.

Пакетный файл:

 @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 '"$EXEDIRmybrokenapp.exe" $1' $0
SetErrorLevel $0
Quit
SectionEnd
  

Проблема с программой запуска, которая изменяет текущий каталог, заключается в том, что она прерывает вызывающие устройства, которые передают относительный путь в командной строке : applauncher.exe .somefile.ext .