- Clean up both sc.exe and nssm services before install - Wait 1s after remove for SCM to release - Retry up to 3x with 3s delay if 'marked for deletion' - Added import time for sleep calls
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
module main
|
module main
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import time
|
||||||
|
|
||||||
pub fn service_install(config_path string, quiet bool) ! {
|
pub fn service_install(config_path string, quiet bool) ! {
|
||||||
exe_path := os.executable()
|
exe_path := os.executable()
|
||||||
@@ -36,16 +37,35 @@ pub fn service_install(config_path string, quiet bool) ! {
|
|||||||
}
|
}
|
||||||
println(' Using nssm: ${nssm_exe}')
|
println(' Using nssm: ${nssm_exe}')
|
||||||
|
|
||||||
// Remove previous install if exists
|
// Remove previous installs (both sc.exe and nssm)
|
||||||
os.execute('"${nssm_exe}" stop ${name}')
|
os.execute('sc stop ${name} 2>nul')
|
||||||
os.execute('"${nssm_exe}" remove ${name} confirm')
|
os.execute('sc delete ${name} 2>nul')
|
||||||
|
os.execute('"${nssm_exe}" stop ${name} 2>nul')
|
||||||
|
os.execute('"${nssm_exe}" remove ${name} confirm 2>nul')
|
||||||
|
|
||||||
// Install the service
|
// Wait for SCM to release any "marked for deletion" state
|
||||||
r := os.execute('"${nssm_exe}" install ${name} "${exe_path}" ${args}')
|
time.sleep(1 * time.second)
|
||||||
if r.exit_code != 0 {
|
|
||||||
|
// Install the service (retry up to 3 times for "marked for deletion")
|
||||||
|
mut installed := false
|
||||||
|
for attempt := 1; attempt <= 3; attempt++ {
|
||||||
|
r := os.execute('"${nssm_exe}" install ${name} "${exe_path}" ${args}')
|
||||||
|
if r.exit_code == 0 {
|
||||||
|
installed = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if r.output.contains('marked for deletion') {
|
||||||
|
println(' Service still marked for deletion, waiting...')
|
||||||
|
time.sleep(3 * time.second)
|
||||||
|
continue
|
||||||
|
}
|
||||||
eprintln('nssm install failed: ${r.output}')
|
eprintln('nssm install failed: ${r.output}')
|
||||||
exit(1)
|
exit(1)
|
||||||
}
|
}
|
||||||
|
if !installed {
|
||||||
|
eprintln('nssm install failed after 3 attempts. Close services.msc and try again.')
|
||||||
|
exit(1)
|
||||||
|
}
|
||||||
println(' Service registered.')
|
println(' Service registered.')
|
||||||
|
|
||||||
// Configure service
|
// Configure service
|
||||||
|
|||||||
Reference in New Issue
Block a user