33
44'use strict' ;
55
6- import { l10n } from 'vscode' ;
6+ import * as path from 'path' ;
7+ import { env , l10n } from 'vscode' ;
78import type { IProcessInfo } from '@vscode/windows-process-tree' ;
89import { getOSType , OSType } from '../../common/platform' ;
910import { PsProcessParser } from './psProcessParser' ;
@@ -16,6 +17,14 @@ import { logProcess } from '../../common/process/logger';
1617export class AttachProcessProvider implements IAttachProcessProvider {
1718 constructor ( ) { }
1819
20+ public _loadWindowsProcessTree ( ) : typeof import ( '@vscode/windows-process-tree' ) {
21+ const wpcPath = path . join ( env . appRoot , 'node_modules' , '@vscode' , 'windows-process-tree' ) ;
22+ // Use eval to bypass webpack's require interception for loading native addon at runtime
23+ // eslint-disable-next-line no-eval
24+ const nodeRequire = eval ( 'require' ) as NodeJS . Require ;
25+ return nodeRequire ( wpcPath ) ;
26+ }
27+
1928 public getAttachItems ( ) : Promise < IAttachItem [ ] > {
2029 return this . _getInternalProcessEntries ( ) . then ( ( processEntries ) => {
2130 processEntries . sort (
@@ -63,7 +72,7 @@ export class AttachProcessProvider implements IAttachProcessProvider {
6372
6473 if ( osType === OSType . Windows ) {
6574 try {
66- const wpc = require ( '@vscode/windows-process-tree' ) ;
75+ const wpc = this . _loadWindowsProcessTree ( ) ;
6776 const processList = await new Promise < IProcessInfo [ ] > ( ( resolve ) => {
6877 wpc . getAllProcesses (
6978 ( processes : IProcessInfo [ ] ) => resolve ( processes ) ,
0 commit comments