◆ file スキームでサーバ名があると __dirname は共有名以降の相対パス

Electron アプリを共有フォルダ上に置いて実行していたら予想外のエラーが置きました
__dirname で絶対パスが取得できません

ファイル自身は

file://server/hdd/data/programs/apps/electron/test/index.html

のような file スキームのファイルになります
このファイル上で __dirname を使うと

hdd\data\programs\apps\electron\test

が取得できます
サーバ名の部分が消えて共有名以降だけになってます

相対パスになるので __dirname を使った join でファイル名を作って

fs.writeFileSync(path.join(__dirname, "output.txt"), "data")

のようなことをしてると予想外の場所に書き込まれます

起動は package.json と同じフォルダにある bat ファイルから行ったのですが コマンドプロンプトがドライブレターなしのパスに移動できないからかカレントディレクトリは

C:\Windows

になっていました

bat は単純にこんなものです

start C:\data\programs\electron5\electron.exe %~dp0

そのせいもあって書き込み先は C:\Windows\hdd\data\略 になっていました
親フォルダがなければ作るという処理も入っていたのですが 一般ユーザ権限だったので権限不足で書き込み失敗エラーになりました
管理者権限でファイルパスによっては最悪 C:\Windows のファイルが壊れていた可能性もあるので怖いですね

念の為 絶対パスかの確認処理を入れておいたほうが安心かもしれません

path.isAbsolute(__dirname)