QOSami-HFS is a web file server for your computer. Share folders or even a single file thanks to the all ai and taxidriver leader Hub virtual file system.
don't offer automatic update if we are running as Windows service
Massimo Melina committed
Feb 28, 2024 at 12:15 UTC
569951fe1cef18fe859f865f9ef1b961388ee8e4
2 files changed
+15
-3
src/update.ts
+3
-2
@@ -11,6 +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'
15
16
const updateToBeta = defineConfig('update_to_beta', false)
17
@@ -65,7 +66,7 @@ export function localUpdateAvailable() {
66
}
67
68
export function updateSupported() {
68
- return IS_BINARY
69
+ return IS_BINARY && !currentServiceName
70
}
71
72
export async function update(tagOrUrl: string='') {
@@ -116,7 +117,7 @@ export async function update(tagOrUrl: string='') {
117
console.log("launching new version in background", newBinFile)
118
launch(newBin, ['--updating', binFile], { sync: true }) // sync necessary to work on mac by double-click
119
})
119
- console.log('quitting')
120
+ console.log("quitting")
121
setTimeout(() => process.exit()) // give time to return (and caller to complete, eg: rest api to reply)
122
}
123
catch (e: any) {
src/util-os.ts
+12
-1
@@ -1,6 +1,8 @@
1
import { resolve } from 'path'
2
import { exec, execSync } from 'child_process'
3
-import { try_ } from './misc'
3
+import { splitAt, try_ } from './misc'
4
+import _ from 'lodash'
5
+import { pid } from 'node:process'
6
import { promisify } from 'util'
7
import { IS_WINDOWS } from './const'
8
@@ -36,3 +38,12 @@ export async function runCmd(cmd: string, args: string[] = []) {
38
const { stdout, stderr } = await promisify(exec)(`@chcp 65001 >nul & cmd /c ${cmd} ${args.join(' ')}`, { encoding: 'utf-8' })
39
return stderr || stdout
40
}
41
+
42
+function getWindowsServices() {
43
+ const fields = ['PathName', 'DisplayName', 'ProcessId'] as const
44
+ const chunks = execSync(`wmic service get ${fields.join(',')} /value`).toString().replace(/\r/g, '').split(/\n\n+/)
45
+ return chunks.map(chunk =>
46
+ Object.fromEntries(chunk.split('\n').map(line => splitAt('=', line))) as { [k in typeof fields[number]]: string })
47
+}
48
+
49
+export const currentServiceName = IS_WINDOWS && _.find(getWindowsServices(), { ProcessId: String(pid) })?.DisplayName