99 "hash"
1010 "io"
1111 "net/url"
12+ "os"
13+ "path/filepath"
1214 "strconv"
1315 "strings"
1416 "sync/atomic"
@@ -18,6 +20,7 @@ import (
1820 "golang.org/x/sys/windows"
1921
2022 "github.com/fosrl/newt/logger"
23+ "github.com/fosrl/windows/config"
2124 "github.com/fosrl/windows/elevate"
2225 "github.com/fosrl/windows/updater/winhttp"
2326 "github.com/fosrl/windows/version"
@@ -376,12 +379,26 @@ func DownloadVerifyAndExecute(userToken uintptr) (progress chan DownloadProgress
376379
377380 logger .Info ("Updater: Starting MSI installation" )
378381 progress <- DownloadProgress {Activity : "Installing update" }
382+
383+ restartUIFlagPath := filepath .Join (config .GetProgramDataDir (), "restart-ui-after-update.flag" )
384+ if err := os .MkdirAll (config .GetProgramDataDir (), 0o755 ); err != nil {
385+ logger .Error ("Updater: Failed to create ProgramData dir for restart flag: %v" , err )
386+ } else if err := os .WriteFile (restartUIFlagPath , nil , 0o644 ); err != nil {
387+ logger .Error ("Updater: Failed to write restart-ui flag file: %v" , err )
388+ } else {
389+ logger .Info ("Updater: Wrote restart-ui flag at %s" , restartUIFlagPath )
390+ }
391+
379392 err = runMsi (file , userToken )
380393 if err != nil {
381394 logger .Error ("Updater: MSI installation failed: %v" , err )
395+ if removeErr := os .Remove (restartUIFlagPath ); removeErr != nil && ! os .IsNotExist (removeErr ) {
396+ logger .Error ("Updater: Failed to remove restart-ui flag after MSI failure: %v" , removeErr )
397+ }
382398 progress <- DownloadProgress {Error : err }
383399 return
384400 }
401+ // Flag file left in place so next start can start the UI automatically, then delete the file
385402 logger .Info ("Updater: MSI installation completed successfully" )
386403
387404 logger .Info ("Updater: Update process complete" )
0 commit comments