WindowsにPortable Electron App(packed:electron-builder + asar、ポータブルビルド)を持っています。アプリケーションパスを取得しようとしましたが、実際の「.exe」ファイルではなく、user\tempフォルダー内のパスを返します
元のapp.exeパスを取得する方法はありますか?
私は以下を試しました:
私のテストから得ているパス:
C:\ Users\xxx\AppData\Local\Temp\xxxxxx.tmp\app
実際の.exeパス(アプリの起動元、および必要なもの):
C:\ Users\XXX\Documents\test\dist
私はエレクトロンから始めています。
私は解決策を見つけました:(Electron-Builderによって作成された)環境変数を使用します
process.env.PORTABLE_EXECUTABLE_DIR
app.exeの実際のパスを表示します。 Electron-Builderでのみパックされた作品
メインプロセスから:
// 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);
上記の回答のいずれも、Windows 10では機能しませんでした。
process.env.PORTABLE_EXECUTABLE_DIR
は一時ディレクトリのパスを返します。
私はそれを使って動作させました:
process.env.INIT_CWD
上記の方法のいずれも機能せず、これに外部libを使用したくないので、以下を試しました。
if (!fs.existsSync("../images")) {
fs.mkdirSync("./../images");
}
return path.resolve("./../images/") + "/";
最上位または他の場所に存在する必要がある任意のディレクトリを使用できます。私の場合、ディレクトリの1つ上のレベルに "images"というディレクトリが存在する必要があることを知っています。
このソリューションは、私の場合、DEVビルドと製品(パッケージ)で機能しました。
このアプローチを使用するときに欠点はありますか?
process.env.PORTABLE_EXECUTABLE_FILE
ファイルへのフルパスが表示されます。
私はこれで多くの問題を抱えており、__ dirnameを「。」に置き換えることで問題を解決することができました。以下の作業例を参照してください。
const path = require('path')
const myAppPath = path.resolve('.', 'myapp.exe');