【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
参考文献
- electron/electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS, 入手先 https://github.com/electron/electron
- electron-userland/electron-builder: A complete solution to package and build a ready for distribution Electron app with “auto update” support out of the box, 入手先 https://github.com/electron-userland/electron-builder
- megahertz/electron-log: Just a simple logging module for your Electron application, 入手先 https://github.com/megahertz/electron-log