in src/chromeDebugAdapter.ts [424:498]
private async spawnChrome(chromePath: string, chromeArgs: string[], env: coreUtils.IStringDictionary<string>,
cwd: string, usingRuntimeExecutable: boolean, shouldLaunchUnelevated: boolean): Promise<ChildProcess> {
/* __GDPR__FRAGMENT__
"StepNames" : {
"LaunchTarget.LaunchExe" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
this.events.emitStepStarted('LaunchTarget.LaunchExe');
const platform = coreUtils.getPlatform();
if (platform === coreUtils.Platform.Windows && shouldLaunchUnelevated) {
let chromePid: number;
if (this._doesHostSupportLaunchUnelevatedProcessRequest) {
chromePid = await this.spawnChromeUnelevatedWithClient(chromePath, chromeArgs, env);
} else {
chromePid = await this.spawnChromeUnelevatedWithWindowsScriptHost(chromePath, chromeArgs);
}
this._chromePID = chromePid;
// Cannot get the real Chrome process, so return null.
return null;
} else if (platform === coreUtils.Platform.Windows && !usingRuntimeExecutable) {
const options = {
execArgv: [],
silent: true
};
if (env) {
options['env'] = this.getFullEnv(env);
}
if (cwd) {
options['cwd'] = cwd;
}
const chromeProc = fork(getChromeSpawnHelperPath(), [chromePath, ...chromeArgs], options);
chromeProc.unref();
chromeProc.on('message', data => {
const pidStr = data.toString();
logger.log('got Edge PID: ' + pidStr);
this._chromePID = parseInt(pidStr, 10);
});
chromeProc.on('error', (err) => {
const errMsg = 'chromeSpawnHelper error: ' + err;
logger.error(errMsg);
});
chromeProc.stderr.on('data', data => {
logger.error('[chromeSpawnHelper] ' + data.toString());
});
chromeProc.stdout.on('data', data => {
logger.log('[chromeSpawnHelper] ' + data.toString());
});
return chromeProc;
} else {
logger.log(`spawn('${chromePath}', ${JSON.stringify(chromeArgs) })`);
const options = {
detached: true,
stdio: ['ignore'],
};
if (env) {
options['env'] = this.getFullEnv(env);
}
if (cwd) {
options['cwd'] = cwd;
}
const chromeProc = spawn(chromePath, chromeArgs, options);
chromeProc.unref();
this._chromePID = chromeProc.pid;
return chromeProc;
}
}