Merge pull request #928 from feross/detect-arch

Detect system architecture; send in update/telemetry
This commit is contained in:
Feross Aboukhadijeh
2016-09-17 16:21:46 -07:00
committed by GitHub
3 changed files with 34 additions and 1 deletions

View File

@@ -81,6 +81,8 @@ module.exports = {
IS_PRODUCTION: IS_PRODUCTION,
IS_TEST: IS_TEST,
OS_SYSARCH: is64BitOperatingSystem() ? 'x64' : 'ia32',
POSTER_PATH: path.join(getConfigPath(), 'Posters'),
ROOT_PATH: path.join(__dirname, '..'),
STATIC_PATH: path.join(__dirname, '..', 'static'),
@@ -149,3 +151,32 @@ function isProduction () {
return !/\/electron$/.test(process.execPath)
}
}
/**
* Returns the operating system's CPU architecture. This is different than
* `process.arch` which returns the architecture the binary was compiled for.
*
* On Windows, the most reliable way to detect a 64-bit OS from within a 32-bit
* app is based on the presence of a WOW64 file: %SystemRoot%\SysNative.
*
* Background: https://twitter.com/feross/status/776949077208510464
*/
function is64BitOperatingSystem () {
// This is a 64-bit binary, so the OS clearly supports 64-bit apps
if (process.arch === 'x64') return true
let useEnv = false
try {
useEnv = !!(process.env.SYSTEMROOT && fs.statSync(process.env.SYSTEMROOT))
} catch (err) {}
let sysRoot = useEnv ? process.env.SYSTEMROOT : 'C:\\Windows'
// If %SystemRoot%\SysNative exists, we are in a WOW64 FS Redirected application.
let isWOW64 = false
try {
isWOW64 = !!fs.statSync(path.join(sysRoot, 'sysnative'))
} catch (err) {}
return isWOW64
}

View File

@@ -11,7 +11,8 @@ const windows = require('./windows')
const AUTO_UPDATE_URL = config.AUTO_UPDATE_URL +
'?version=' + config.APP_VERSION +
'&platform=' + process.platform
'&platform=' + process.platform +
'&sysarch=' + config.OS_SYSARCH
function init () {
if (process.platform === 'linux') {

View File

@@ -105,6 +105,7 @@ function getSystemInfo () {
osPlatform: process.platform,
osRelease: os.type() + ' ' + os.release(),
architecture: os.arch(),
systemArchitecture: config.OS_SYSARCH,
totalMemoryMB: roundPow2(os.totalmem() / (1 << 20)),
numCores: os.cpus().length
}