2017-09-19 14 views
6

私はWindows上にPortable Electron App(電子ビルダ+ asar、ポータブルビルド)を持っています。私はアプリケーションのパスを取得しようとしますが、実際の '.exe'ファイルではなくuser \ tempフォルダ内のパスを返します。ポータブル電子アプリの元のパスを取得する方法は?

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

Iは、以下を試してみた:

  • app.getAppPath()
  • __dirname
  • require.main.filename
  • アプリルートパス
  • 及び少数ノードモジュール

私のテストから得られるパス:

C:\ Users \ユーザーxxxは\のAppData \ローカル\ Tempに\ xxxxxx.tmpの\アプリ

実際の.exeファイル(アプリから開始し、何が必要です)パス:

C:\ Users \ユーザーXXX \ドキュメント\テスト\ distの

私はちょうど電子始まりますよ。レンダラプロセスから

// 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); 

:メインプロセスから

+0

私も、このために探しています。.. – Can

答えて

1

私は解決策を見つけた: は

process.env.PORTABLE_EXECUTABLE_DIR 
(電子-Builderで作成した)環境変数を使用

は、App.exeの実際のパスを表示します。 は、それは `返し../ビルド/ MAC /ではありませんAPPName.app /コンテンツ/ MacOS` は、我々は必要なものをMac上で電子・ビルダー

+0

私はこれが空のところでマックにいます.. devモードでビルドした後に:/ – Can

+0

これはうまくいくようです。これはおそらくウィンドウとこれ以外の答えを組み合わせたものです。私はまだ調査する必要があるMacと多分Linuxのために期待している 誰が恩恵を受けるのですか? – Can

1

// 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); 
+0

を詰め動作します。 .. String.placesまたはString.splitで '... builld/mac'部分のみを取得すると、WindowsおよびLinuxにはバージョン番号があるので、プログラムごとにすべてのビルドのアプリケーション名を知ることができますpackage.jsonから構築する)WindowsとLinuxで同じ結果が得られるかどうかチェックする: – Can

+0

あなたのソリューションとLycaKnightのものの組み合わせかもしれないが、誰が賞金を稼ぐ? – Can

関連する問題