回答編集履歴

1

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

2017/07/14 03:51

投稿

so87
so87

スコア764

test CHANGED
@@ -52,6 +52,160 @@
52
52
 
53
53
  } );
54
54
 
55
-
56
-
57
55
  ```
56
+
57
+
58
+
59
+ ==== 2017-07-14 12:46 ====
60
+
61
+ node v6系で確認できるサンプルコードを以下に追記します。
62
+
63
+ プロセス名だけでは一意ではないので、結果はリストで返す仕様としています。
64
+
65
+ ```Javascript
66
+
67
+ 'use strict';
68
+
69
+ const PowerShell = require( 'node-powershell' );
70
+
71
+ const path = require( 'path' );
72
+
73
+ const os = require( 'os' );
74
+
75
+ const _ = require( 'lodash' );
76
+
77
+
78
+
79
+ /**
80
+
81
+ * 指定の実行中プロセス名のディレクトリを取得
82
+
83
+ * @param {string} exename 実行中プロセス名
84
+
85
+ */
86
+
87
+ function getProcessPath( exename = '' )
88
+
89
+ {
90
+
91
+ return new Promise( function ( resolve, reject )
92
+
93
+ {
94
+
95
+ //exeトル
96
+
97
+ let pname = path.basename( exename, '.exe' );
98
+
99
+ let ps = new PowerShell( {
100
+
101
+ executionPolicy: 'Bypass',
102
+
103
+ noProfile: true
104
+
105
+ } );
106
+
107
+ //PowerShellに投げる
108
+
109
+ ps.addCommand( `Get-Process ${pname}| Select-Object path` )
110
+
111
+ ps.invoke()
112
+
113
+ .then( output =>
114
+
115
+ {
116
+
117
+ //splitしてtrimして重複除去して絶対パスだけ通す
118
+
119
+ return _.chain( output )
120
+
121
+ .split( os.EOL )
122
+
123
+ .invokeMap( 'trim' )
124
+
125
+ .uniq()
126
+
127
+ .filter( v => path.isAbsolute( v ) )
128
+
129
+ .value()
130
+
131
+ ;
132
+
133
+ } )
134
+
135
+ .then( list =>
136
+
137
+ {
138
+
139
+ resolve( list );
140
+
141
+ ps.dispose();
142
+
143
+ } )
144
+
145
+ .catch( err =>
146
+
147
+ {
148
+
149
+ console.log( err );
150
+
151
+ ps.dispose();
152
+
153
+ reject( err );
154
+
155
+ } );
156
+
157
+ } );
158
+
159
+ }
160
+
161
+
162
+
163
+ /**
164
+
165
+ * 指定の実行中プロセス名のディレクトリを取得
166
+
167
+ * @param {string} exename 実行中プロセス名
168
+
169
+ */
170
+
171
+ function getProcessBaseDir( exename = '' )
172
+
173
+ {
174
+
175
+ return getProcessPath( exename )
176
+
177
+ .then(( list ) =>
178
+
179
+ {
180
+
181
+ return _.chain( list )
182
+
183
+ .map( v => path.dirname( v ) )
184
+
185
+ .uniq()
186
+
187
+ .value();
188
+
189
+ } )
190
+
191
+ ;
192
+
193
+ }
194
+
195
+
196
+
197
+ /** 実行中node.exeのディレクトリを取得 */
198
+
199
+ getProcessBaseDir('node.exe')
200
+
201
+ .then( dirlist =>
202
+
203
+ {
204
+
205
+ //処理結果
206
+
207
+ console.log( dirlist );
208
+
209
+ } );
210
+
211
+ ```