fix: (beta) error starting on some Windows systems #524
Massimo Melina committed
Mar 19, 2024 at 16:26 UTC
5ea97f92e96df795df3f086e09f0de73fc1bae36
2 files changed
+6
-7
src/update.ts
+2
-2
@@ -11,7 +11,7 @@ import { access, chmod, stat } from 'fs/promises'
11
import { Readable } from 'stream'
12
import open from 'open'
13
import { currentVersion, defineConfig, versionToScalar } from './config'
14
-import { currentServiceName } from './util-os'
14
+import { RUNNING_AS_SERVICE } from './util-os'
15
16
const updateToBeta = defineConfig('update_to_beta', false)
17
@@ -66,7 +66,7 @@ export function localUpdateAvailable() {
66
}
67
68
export async function updateSupported() {
69
- return IS_BINARY && !await currentServiceName
69
+ return IS_BINARY && !await RUNNING_AS_SERVICE
70
}
71
72
export async function update(tagOrUrl: string='') {
src/util-os.ts
+4
-5
@@ -64,13 +64,12 @@ export async function runCmd(cmd: string, args: string[] = []) {
64
return (stderr || stdout).replace(/\r/g, '')
65
}
66
67
-async function getWindowsServices() {
68
- const fields = ['PathName', 'DisplayName', 'ProcessId'] as const
69
- return parseKeyValueObjects<typeof fields[number]>(await runCmd(`wmic service get ${fields.join()} /value`))
67
+async function getWindowsServicePids() {
68
+ const res = await runCmd(`wmic service get ProcessId`)
69
+ return _.uniq(res.split('\n').slice(1).map(x => Number(x.trim())))
70
}
71
72
-export const currentServiceName = IS_WINDOWS && new Promise(async resolve =>
73
- resolve(_.find(await getWindowsServices(), { ProcessId: String(pid) })?.DisplayName))
72
+export const RUNNING_AS_SERVICE = IS_WINDOWS && getWindowsServicePids().then(x => x.includes(pid))
73
74
function parseKeyValueObjects<T extends string>(all: string, keySep='=', lineSep='\n', objectSep=/\n\n+/) {
75
return all.split(objectSep).map(obj =>