child_process, win: fix shell spawn with AutoRun
Under Windows system can be configured to execute a specific command each time a shell is spawned. Under some conditions this breaks the way node handles shell scripts under windows. This commit adds /d switch to spawn and spawnSync which disables this AutoRun functionality. Fixes: https://github.com/nodejs/node-v0.x-archive/issues/25458 PR-URL: https://github.com/nodejs/node/pull/8063 Reviewed-By: João Reis <reis@janeasystems.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Josh Gavant <josh.gavant@outlook.com> Reviewed-By: Rod Vagg <rod@vagg.org>
This commit is contained in:
parent
88ed3d260e
commit
b90f3da9de
@ -132,7 +132,7 @@ added: v0.1.90
|
|||||||
* `encoding` {String} (Default: `'utf8'`)
|
* `encoding` {String} (Default: `'utf8'`)
|
||||||
* `shell` {String} Shell to execute the command with
|
* `shell` {String} Shell to execute the command with
|
||||||
(Default: `'/bin/sh'` on UNIX, `'cmd.exe'` on Windows, The shell should
|
(Default: `'/bin/sh'` on UNIX, `'cmd.exe'` on Windows, The shell should
|
||||||
understand the `-c` switch on UNIX or `/s /c` on Windows. On Windows,
|
understand the `-c` switch on UNIX or `/d /s /c` on Windows. On Windows,
|
||||||
command line parsing should be compatible with `cmd.exe`.)
|
command line parsing should be compatible with `cmd.exe`.)
|
||||||
* `timeout` {Number} (Default: `0`)
|
* `timeout` {Number} (Default: `0`)
|
||||||
* [`maxBuffer`][] {Number} largest amount of data (in bytes) allowed on
|
* [`maxBuffer`][] {Number} largest amount of data (in bytes) allowed on
|
||||||
@ -317,7 +317,7 @@ added: v0.1.90
|
|||||||
* `shell` {Boolean|String} If `true`, runs `command` inside of a shell. Uses
|
* `shell` {Boolean|String} If `true`, runs `command` inside of a shell. Uses
|
||||||
`'/bin/sh'` on UNIX, and `'cmd.exe'` on Windows. A different shell can be
|
`'/bin/sh'` on UNIX, and `'cmd.exe'` on Windows. A different shell can be
|
||||||
specified as a string. The shell should understand the `-c` switch on UNIX,
|
specified as a string. The shell should understand the `-c` switch on UNIX,
|
||||||
or `/s /c` on Windows. Defaults to `false` (no shell).
|
or `/d /s /c` on Windows. Defaults to `false` (no shell).
|
||||||
* return: {ChildProcess}
|
* return: {ChildProcess}
|
||||||
|
|
||||||
The `child_process.spawn()` method spawns a new process using the given
|
The `child_process.spawn()` method spawns a new process using the given
|
||||||
@ -619,7 +619,7 @@ added: v0.11.12
|
|||||||
* `env` {Object} Environment key-value pairs
|
* `env` {Object} Environment key-value pairs
|
||||||
* `shell` {String} Shell to execute the command with
|
* `shell` {String} Shell to execute the command with
|
||||||
(Default: `'/bin/sh'` on UNIX, `'cmd.exe'` on Windows, The shell should
|
(Default: `'/bin/sh'` on UNIX, `'cmd.exe'` on Windows, The shell should
|
||||||
understand the `-c` switch on UNIX or `/s /c` on Windows. On Windows,
|
understand the `-c` switch on UNIX or `/d /s /c` on Windows. On Windows,
|
||||||
command line parsing should be compatible with `cmd.exe`.)
|
command line parsing should be compatible with `cmd.exe`.)
|
||||||
* `uid` {Number} Sets the user identity of the process. (See setuid(2).)
|
* `uid` {Number} Sets the user identity of the process. (See setuid(2).)
|
||||||
* `gid` {Number} Sets the group identity of the process. (See setgid(2).)
|
* `gid` {Number} Sets the group identity of the process. (See setgid(2).)
|
||||||
@ -672,7 +672,7 @@ added: v0.11.12
|
|||||||
* `shell` {Boolean|String} If `true`, runs `command` inside of a shell. Uses
|
* `shell` {Boolean|String} If `true`, runs `command` inside of a shell. Uses
|
||||||
`'/bin/sh'` on UNIX, and `'cmd.exe'` on Windows. A different shell can be
|
`'/bin/sh'` on UNIX, and `'cmd.exe'` on Windows. A different shell can be
|
||||||
specified as a string. The shell should understand the `-c` switch on UNIX,
|
specified as a string. The shell should understand the `-c` switch on UNIX,
|
||||||
or `/s /c` on Windows. Defaults to `false` (no shell).
|
or `/d /s /c` on Windows. Defaults to `false` (no shell).
|
||||||
* return: {Object}
|
* return: {Object}
|
||||||
* `pid` {Number} Pid of the child process
|
* `pid` {Number} Pid of the child process
|
||||||
* `output` {Array} Array of results from stdio output
|
* `output` {Array} Array of results from stdio output
|
||||||
|
@ -338,7 +338,7 @@ function normalizeSpawnArguments(file /*, args, options*/) {
|
|||||||
if (process.platform === 'win32') {
|
if (process.platform === 'win32') {
|
||||||
file = typeof options.shell === 'string' ? options.shell :
|
file = typeof options.shell === 'string' ? options.shell :
|
||||||
process.env.comspec || 'cmd.exe';
|
process.env.comspec || 'cmd.exe';
|
||||||
args = ['/s', '/c', '"' + command + '"'];
|
args = ['/d', '/s', '/c', '"' + command + '"'];
|
||||||
options.windowsVerbatimArguments = true;
|
options.windowsVerbatimArguments = true;
|
||||||
} else {
|
} else {
|
||||||
if (typeof options.shell === 'string')
|
if (typeof options.shell === 'string')
|
||||||
|
@ -241,7 +241,7 @@ exports.spawnPwd = function(options) {
|
|||||||
var spawn = require('child_process').spawn;
|
var spawn = require('child_process').spawn;
|
||||||
|
|
||||||
if (exports.isWindows) {
|
if (exports.isWindows) {
|
||||||
return spawn('cmd.exe', ['/c', 'cd'], options);
|
return spawn('cmd.exe', ['/d', '/c', 'cd'], options);
|
||||||
} else {
|
} else {
|
||||||
return spawn('pwd', [], options);
|
return spawn('pwd', [], options);
|
||||||
}
|
}
|
||||||
@ -252,7 +252,7 @@ exports.spawnSyncPwd = function(options) {
|
|||||||
const spawnSync = require('child_process').spawnSync;
|
const spawnSync = require('child_process').spawnSync;
|
||||||
|
|
||||||
if (exports.isWindows) {
|
if (exports.isWindows) {
|
||||||
return spawnSync('cmd.exe', ['/c', 'cd'], options);
|
return spawnSync('cmd.exe', ['/d', '/c', 'cd'], options);
|
||||||
} else {
|
} else {
|
||||||
return spawnSync('pwd', [], options);
|
return spawnSync('pwd', [], options);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user