ぺんちゃん日記

食と歴史と IT と。 Web の旅人ぺんじろうが好奇心赴くままに彷徨います 。

Node.js から Windows 10のショートカットを起動する。

Node.js でCHILD process からファイルを起動する処理を書いています。
主に AutoHotkeyの自動化スクリプトを起動させています。

スクリプトの性質によっては自動化処理で管理者権限を必要とするものがあります。
この場合、スクリプトを管理者権限で実行しなければなりません。
管理者権限で実行する簡単な方法は、ショートカットを作成して、propertyから管理者として実行のチェックを有効にしておくことです。
つまり、ショートカットリンクを CHILD process で起動すれば良いことになります。

ショートカットの実行。

CHILD process からコマンドを実行するにはexecまたはspawnを使います。
ショートカットの実行には後者を使います。

  let fn = '"' + path.resolve(dir_home, 'Documents') + '/stoppsr.ahk.lnk' + '"';
  spawn(fn, [], { shell: true })

こんな感じで自分のdocumentsディレクトリの下のstoppsr.ahkショートカットを起動できます。

stackoverflow.com

第3パラメーターでシェルの実行にしているのがポイントです。
なおこの手法はどんなコマンドでも実行できてしまうセキュリティリスクを含んでいるので注意が必要です。
しかも管理者権限で実行してるから大丈夫かな?

ショートカットの落とし穴。

ショートカットのファイル名は、ショートカットの名称に.lnkの拡張子を追加したものです。
厄介なことにファイル名をエクスプローラから確認しても拡張子は表示されません。
フォルダオプションで拡張子を表示するように設定してあってもです。
次の画像で拡張子が lnk でないことが確認できます。

f:id:yasushiito:20190606160638p:plain

試しにショートカットを右クリックしてpropertyから詳細タブを開いて 名前を確認してみてください。
拡張子 lnk が表示されていると思います。

f:id:yasushiito:20190606160707p:plain