@samitouri / QOSami-HFS / commits / 569951fe
Fork 0

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