プロセス名や実行パスは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
7910
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
495152
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
67getProcessBaseDir('node.exe')
68 .then( dirlist =>
69 {
70 //処理結果
71 console.log( dirlist );
72 } );
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/13 14:50
2017/07/14 03:52 編集
2017/07/14 03:58