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 =>