web-dev-qa-db-ja.com

ポータブルElectronアプリの元のパスを取得するにはどうすればよいですか?

WindowsにPortable Electron App(packed:electron-builder + asar、ポータブルビルド)を持っています。アプリケーションパスを取得しようとしましたが、実際の「.exe」ファイルではなく、user\tempフォルダー内のパスを返します

元のapp.exeパスを取得する方法はありますか?

私は以下を試しました:

  • app.getAppPath()
  • __dirname
  • require.main.filename
  • アプリルートパス
  • そしていくつかのノードモジュール

私のテストから得ているパス:

C:\ Users\xxx\AppData\Local\Temp\xxxxxx.tmp\app

実際の.exeパス(アプリの起動元、および必要なもの):

C:\ Users\XXX\Documents\test\dist

私はエレクトロンから始めています。

15
LycaKnight

私は解決策を見つけました:(Electron-Builderによって作成された)環境変数を使用します

process.env.PORTABLE_EXECUTABLE_DIR

app.exeの実際のパスを表示します。 Electron-Builderでのみパックされた作品

7
LycaKnight

メインプロセスから:

// If not already defined...
const { app } = require ('electron');
const path = require ('path');

let execPath;

execPath = path.dirname (app.getPath ('exe'));
// or
execPath = path.dirname (process.execPath);

レンダラープロセスから:

// If not already defined...
const { remote } = require ('electron');
const path = require ('path');

let execPath;

execPath = path.dirname (remote.app.getPath ('exe'));
// or
execPath = path.dirname (remote.process.execPath);
6
user8022331

上記の回答のいずれも、Windows 10では機能しませんでした。

process.env.PORTABLE_EXECUTABLE_DIRは一時ディレクトリのパスを返します。

私はそれを使って動作させました:

process.env.INIT_CWD
2
David J.

上記の方法のいずれも機能せず、これに外部libを使用したくないので、以下を試しました。

        if (!fs.existsSync("../images")) {
            fs.mkdirSync("./../images");            
        }
        return path.resolve("./../images/") + "/";

最上位または他の場所に存在する必要がある任意のディレクトリを使用できます。私の場合、ディレクトリの1つ上のレベルに "images"というディレクトリが存在する必要があることを知っています。

このソリューションは、私の場合、DEVビルドと製品(パッケージ)で機能しました。

このアプローチを使用するときに欠点はありますか?

1
Josef Biehler
process.env.PORTABLE_EXECUTABLE_FILE

ファイルへのフルパスが表示されます。

1
ramaralo

私はこれで多くの問題を抱えており、__ dirnameを「。」に置き換えることで問題を解決することができました。以下の作業例を参照してください。

const path = require('path')
const myAppPath = path.resolve('.', 'myapp.exe');
0
Antonin GAVREL