diff --git a/test/processExecSync.js b/test/processExecSync.js
new file mode 100644
index 0000000000..d9e8534280
--- /dev/null
+++ b/test/processExecSync.js
@@ -0,0 +1,141 @@
+var fs = require('graceful-fs')
+var child_process = require('child_process')
+var exec = child_process.exec
+
+if (!String.prototype.startsWith) {
+    String.prototype.startsWith = function(search, pos) {
+        return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
+    };
+}
+
+function processExecSync(file, args, options) {
+  var child, error, timeout, tmpdir, command, quote;
+  command = makeCommand(file, args);
+
+  /*
+    this function emulates child_process.execSync for legacy node <= 0.10.x
+    derived from https://github.com/gvarsanyi/sync-exec/blob/master/js/sync-exec.js
+  */
+
+  options = options || {};
+  // init timeout
+  timeout = Date.now() + options.timeout;
+  // init tmpdir
+  var os_temp_base = "/tmp";
+  var os = determine_os();
+  os_temp_base = "/tmp"
+
+  if(process.env.TMP){
+    os_temp_base = process.env.TMP;
+  }
+
+  if(os_temp_base[os_temp_base.length - 1] !== "/"){
+    os_temp_base += "/";
+  }
+
+  tmpdir = os_temp_base+'processExecSync.' + Date.now() + Math.random();
+  fs.mkdirSync(tmpdir);
+
+  // init command
+  if(os === "linux"){
+    command = '(' + command + ' > ' + tmpdir + '/stdout 2> ' + tmpdir +
+      '/stderr); echo $? > ' + tmpdir + '/status';
+  }else{
+    command = '(' + command + ' > ' + tmpdir + '/stdout 2> ' + tmpdir +
+      '/stderr) | echo %errorlevel% > ' + tmpdir + '/status | exit';
+  }
+
+  // init child
+  child = exec(command, options, function () {
+      return;
+  });
+
+  var maxTry = 100000; // increases the test time by 6 seconds on win-2016-node-0.10
+  var tryCount = 0;
+  while (tryCount < maxTry) {
+    try {
+      var x = fs.readFileSync(tmpdir + '/status');
+      if(x.toString() === "0"){
+        break;
+      }
+    } catch (ignore) {
+    }
+    tryCount++;
+    if (Date.now() > timeout) {
+      error = child;
+      break;
+    }
+  }
+
+  ['stdout', 'stderr', 'status'].forEach(function (file) {
+    child[file] = fs.readFileSync(tmpdir + '/' + file, options.encoding);
+    setTimeout(unlinkFile, 500, tmpdir + '/' + file);
+  });
+
+  child.status = Number(child.status);
+  if (child.status !== 0) {
+      error = child;
+  }
+
+  try {
+      fs.rmdirSync(tmpdir);
+  } catch (ignore) {
+  }
+  if (error) {
+      throw error;
+  }
+  return child.stdout;
+}
+
+module.exports = processExecSync;
+
+function makeCommand(file, args){
+  var command, quote;
+  command = file
+  if(args.length > 0){
+    for(var i in args){
+      command = command + " ";
+      if(args[i][0] === "-"){
+        command = command + args[i];
+      }else{
+        if(!quote){
+          command = command + "\"";
+          quote = true;  
+        }
+        command = command + args[i];
+        if(quote){
+          if(args.length === (parseInt(i) + 1)){
+            command = command + "\"";
+          }
+        }
+      }
+    }
+  }
+  return command;
+}
+
+function determine_os(){
+  var os = "";
+  var tmpVar = "";
+  if(process.env.OSTYPE){
+    tmpVar = process.env.OSTYPE;
+  }else if(process.env.OS){
+    tmpVar = process.env.OS;
+  }else{
+    //default is linux
+    tmpVar = "linux";
+  }
+
+  if(tmpVar.startsWith("linux")){
+    os = "linux"
+  }
+  if(tmpVar.startsWith("win")){
+    os = "win"
+  }
+
+  return os;
+}
+
+function unlinkFile(file){
+  fs.unlinkSync(file);
+}
diff --git a/test/test-addon.js b/test/test-addon.js
index 7ace1caf6a..2f4509ade4 100644
--- a/test/test-addon.js
+++ b/test/test-addon.js
@@ -6,7 +6,7 @@ var fs = require('graceful-fs')
 var child_process = require('child_process')
 var addonPath = path.resolve(__dirname, 'node_modules', 'hello_world')
 var nodeGyp = path.resolve(__dirname, '..', 'bin', 'node-gyp.js')
-var execFileSync = child_process.execFileSync
+var execFileSync = child_process.execFileSync || require('./processExecSync')
 var execFile = child_process.execFile
 
 function runHello() {