teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追加のご要望がありましたので、コードを追記編集致します。

2017/07/14 03:51

投稿

so87
so87

スコア789

answer CHANGED
@@ -25,5 +25,82 @@
25
25
  console.log( err );
26
26
  ps.dispose();
27
27
  } );
28
+ ```
28
29
 
30
+ ==== 2017-07-14 12:46 ====
31
+ node v6系で確認できるサンプルコードを以下に追記します。
32
+ プロセス名だけでは一意ではないので、結果はリストで返す仕様としています。
33
+ ```Javascript
34
+ 'use strict';
35
+ const PowerShell = require( 'node-powershell' );
36
+ const path = require( 'path' );
37
+ const os = require( 'os' );
38
+ const _ = require( 'lodash' );
39
+
40
+ /**
41
+ * 指定の実行中プロセス名のディレクトリを取得
42
+ * @param {string} exename 実行中プロセス名
43
+ */
44
+ function getProcessPath( exename = '' )
45
+ {
46
+ return new Promise( function ( resolve, reject )
47
+ {
48
+ //exeトル
49
+ let pname = path.basename( exename, '.exe' );
50
+ let ps = new PowerShell( {
51
+ executionPolicy: 'Bypass',
52
+ noProfile: true
53
+ } );
54
+ //PowerShellに投げる
55
+ ps.addCommand( `Get-Process ${pname}| Select-Object path` )
56
+ ps.invoke()
57
+ .then( output =>
58
+ {
59
+ //splitしてtrimして重複除去して絶対パスだけ通す
60
+ return _.chain( output )
61
+ .split( os.EOL )
62
+ .invokeMap( 'trim' )
63
+ .uniq()
64
+ .filter( v => path.isAbsolute( v ) )
65
+ .value()
66
+ ;
67
+ } )
68
+ .then( list =>
69
+ {
70
+ resolve( list );
71
+ ps.dispose();
72
+ } )
73
+ .catch( err =>
74
+ {
75
+ console.log( err );
76
+ ps.dispose();
77
+ reject( err );
78
+ } );
79
+ } );
80
+ }
81
+
82
+ /**
83
+ * 指定の実行中プロセス名のディレクトリを取得
84
+ * @param {string} exename 実行中プロセス名
85
+ */
86
+ function getProcessBaseDir( exename = '' )
87
+ {
88
+ return getProcessPath( exename )
89
+ .then(( list ) =>
90
+ {
91
+ return _.chain( list )
92
+ .map( v => path.dirname( v ) )
93
+ .uniq()
94
+ .value();
95
+ } )
96
+ ;
97
+ }
98
+
99
+ /** 実行中node.exeのディレクトリを取得 */
100
+ getProcessBaseDir('node.exe')
101
+ .then( dirlist =>
102
+ {
103
+ //処理結果
104
+ console.log( dirlist );
105
+ } );
29
106
  ```