🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

WMI

WMIは、Windowsのシステムを管理する共通インターフェース。OSやコンピュータに関するインベントリ情報を取得し、設定・管理することが可能です。監視情報のデータ構造をCIMで標準化し、監視対象に関係なく共通のインターフェースを利用できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

10938閲覧

Node.jsから実行中のアプリケーションを取得する

yuta0801

総合スコア270

Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

WMI

WMIは、Windowsのシステムを管理する共通インターフェース。OSやコンピュータに関するインベントリ情報を取得し、設定・管理することが可能です。監視情報のデータ構造をCIMで標準化し、監視対象に関係なく共通のインターフェースを利用できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/06/27 10:05

編集2017/07/04 11:25

###前提・実現したいこと
Electronから、他のアプリケーション実行元のディレクトリを取得したいです

###調べたこと
かなり調べたのですが、実行中のプロセスを取得するには
VBScriptで以下のように書いてWMIで取得すると書いてあったので

vb

1GetObject("winmgmts:\\\\.\\root\\cimv2")

node-wmiで以下のように書いて取得しようとしたのですが、
undefinedしか帰ってきませんでした。

js

1var wmi = require('node-wmi'); 2wmi.Query({ 3 class: 'winmgmts' 4}, function(err, data) { 5 console.log(data); 6});

###補足情報(言語/FW/ツール等のバージョンなど)
windows 10 x64
node v6.9.5
electron v1.6.11

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

プロセス名や実行パスはPower Shellにて下記コマンドにて取得できますので、

PowerShell

1Get-Process | Select-Object name,id,path

node-powershellを使って下記のコードをelectronにて実行してみたところ、無事実行パスが取得できました。
あとは煮るなり焼くなり、Pathモジュールでディレクトリを導き出せばOKかと。

JavaScript

1import PowerShell from 'node-powershell' 2 3let ps = new PowerShell( { 4 executionPolicy: 'Bypass', 5 noProfile: true 6} ); 7ps.addCommand( 'Get-Process | Select-Object name,id,path' ) 8ps.invoke() 9 .then( output => 10 { 11 console.log( output ); 12 } ) 13 .catch( err => 14 { 15 console.log( err ); 16 ps.dispose(); 17 } );

==== 2017-07-14 12:46 ====
node v6系で確認できるサンプルコードを以下に追記します。
プロセス名だけでは一意ではないので、結果はリストで返す仕様としています。

Javascript

1'use strict'; 2const PowerShell = require( 'node-powershell' ); 3const path = require( 'path' ); 4const os = require( 'os' ); 5const _ = require( 'lodash' ); 6 7/** 8 * 指定の実行中プロセス名のディレクトリを取得 9 * @param {string} exename 実行中プロセス名 10 */ 11function getProcessPath( exename = '' ) 12{ 13 return new Promise( function ( resolve, reject ) 14 { 15 //exeトル 16 let pname = path.basename( exename, '.exe' ); 17 let ps = new PowerShell( { 18 executionPolicy: 'Bypass', 19 noProfile: true 20 } ); 21 //PowerShellに投げる 22 ps.addCommand( `Get-Process ${pname}| Select-Object path` ) 23 ps.invoke() 24 .then( output => 25 { 26 //splitしてtrimして重複除去して絶対パスだけ通す 27 return _.chain( output ) 28 .split( os.EOL ) 29 .invokeMap( 'trim' ) 30 .uniq() 31 .filter( v => path.isAbsolute( v ) ) 32 .value() 33 ; 34 } ) 35 .then( list => 36 { 37 resolve( list ); 38 ps.dispose(); 39 } ) 40 .catch( err => 41 { 42 console.log( err ); 43 ps.dispose(); 44 reject( err ); 45 } ); 46 } ); 47} 48 49/** 50 * 指定の実行中プロセス名のディレクトリを取得 51 * @param {string} exename 実行中プロセス名 52 */ 53function getProcessBaseDir( exename = '' ) 54{ 55 return getProcessPath( exename ) 56 .then(( list ) => 57 { 58 return _.chain( list ) 59 .map( v => path.dirname( v ) ) 60 .uniq() 61 .value(); 62 } ) 63 ; 64} 65 66/** 実行中node.exeのディレクトリを取得 */ 67getProcessBaseDir('node.exe') 68 .then( dirlist => 69 { 70 //処理結果 71 console.log( dirlist ); 72 } );

投稿2017/07/11 03:38

編集2017/07/14 03:51
so87

総合スコア764

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuta0801

2017/07/13 14:50

解決後にすいません リストのような形で出力されるログからどのようにプログラム名を指定してパスを取得すればいいでしょうか?
so87

2017/07/14 03:52 編集

コメント欄ではコードが書けなかったので、回答に追記いたしました。 ヒントとなれば幸いです。
so87

2017/07/14 03:58

あと最初にVBScriptでの実装を試みていらしたので、 勝手にWindows限定の要件だと思い、PowerShellを使った回答としました。 LinuxやMacでの動作は考慮しておりませんのでご了承ください。
guest

0

少し検索した感じこれで取れそうなので試して見ては?
(electrionはやってないので実際とれるかは知りません)
https://github.com/electron/electron/blob/master/docs/api/app.md#appgetapppath

javascript

1const path = require('remote').require('app').getAppPath();

投稿2017/07/02 10:25

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuta0801

2017/07/04 11:25

説明不足だったようですいません。 実行しているここで言っているアプリケーションはユーザーが起動している他のアプリケーションのことです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問