tomatoaiu の Tech Blog

プログラミングやツールについてのまとめブログ

【Electron】electron-builderでのexeファイルの位置をelectron-logで書き出す

モチベーション

electron-builderでのパッケージング時に、portableを指定している場合の作成されたexeファイルの位置を知りたい。これをどうするのかで結構悩んだ。

環境

  • 【Windows】:10
  • 【Electron】: v5
  • 【electron-builder】
    • 【Numerous target formats】:portable

実装失敗

以下のように5つの方法でやってみる。

import * as log from 'electron-log';
import * as path from 'path';

log.debug(app.getPath('exe'));
log.debug(app.getPath('module'));
log.debug(process.cwd());
log.debug(__dirname);
log.debug(path.resolve(''));
C:\Users\<user>\AppData\Local\Temp\<randomな文字>\electron-sample.exe
C:\Users\<user>\AppData\Local\Temp\<randomな文字>\electron-sample.exe
C:\Users\<user>AppData\Local\Temp\<randomな文字>
C:\Users\<user>\AppData\Local\Temp\<randomな文字>\resources\app.asar\dist
C:\Users\<user>\AppData\Local\Temp\<randomな文字>

どれもportableで作成したexeの位置ではない。portableで作成したexeファイルを実行した時に作成されるexeファイルの位置ならこれでokなんだけどね。

実装成功

ここに乗っていた。process.env.PORTABLE_EXECUTABLE_DIR これに exe ファイルの位置が格納されていた!

import * as log from 'electron-log';

log.debug(process.env.PORTABLE_EXECUTABLE_DIR);
C:\Users\<user>\development\<electron-sample>\release

やったぜ!!

おまけ

以下のようにすることで、electron-builderでパッケージング後に出力されたexeファイルの位置にログファイルが出力されるはず。

const path = process.env.PORTABLE_EXECUTABLE_DIR;
log.transports.file.level = path;

気をつけたいことが、$ electron ./main.js等をした時には、exeファイルがまだないのでエラーが出ること。なので、開発モードとプロダクションモードでいい感じにコードを切り分ける必要がある。

electron-builderについての続き
tomatoaiu.hatenablog.com

参考文献