| var log = require('npmlog') |
| , execFile = require('child_process').execFile |
| , path = require('path') |
| |
| function findVS2017(callback) { |
| var ps = path.join(process.env.SystemRoot, 'System32', 'WindowsPowerShell', |
| 'v1.0', 'powershell.exe') |
| var csFile = path.join(__dirname, 'Find-VS2017.cs') |
| var psArgs = ['-ExecutionPolicy', 'Unrestricted', '-NoProfile', |
| '-Command', '&{Add-Type -Path \'' + csFile + '\';' + |
| '[VisualStudioConfiguration.Main]::Query()}'] |
| |
| log.silly('find vs2017', 'Running', ps, psArgs) |
| var child = execFile(ps, psArgs, { encoding: 'utf8' }, |
| function (err, stdout, stderr) { |
| log.silly('find vs2017', 'PS err:', err) |
| log.silly('find vs2017', 'PS stdout:', stdout) |
| log.silly('find vs2017', 'PS stderr:', stderr) |
| |
| if (err) |
| return callback(new Error('Could not use PowerShell to find VS2017')) |
| |
| var vsSetup |
| try { |
| vsSetup = JSON.parse(stdout) |
| } catch (e) { |
| log.silly('find vs2017', e) |
| return callback(new Error('Could not use PowerShell to find VS2017')) |
| } |
| log.silly('find vs2017', 'vsSetup:', vsSetup) |
| |
| if (vsSetup && vsSetup.log) |
| log.verbose('find vs2017', vsSetup.log.trimRight()) |
| |
| if (!vsSetup || !vsSetup.path || !vsSetup.sdk) { |
| return callback(new Error('No usable installation of VS2017 found')) |
| } |
| |
| log.verbose('find vs2017', 'using installation:', vsSetup.path) |
| callback(null, { "path": vsSetup.path, "sdk": vsSetup.sdk }) |
| }) |
| |
| child.stdin.end() |
| } |
| |
| module.exports = findVS2017 |