github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/install/stop_windows.go (about)

     1  // Copyright 2019 Keybase, Inc. All rights reserved. Use of
     2  // this source code is governed by the included BSD license.
     3  
     4  //go:build windows
     5  // +build windows
     6  
     7  package install
     8  
     9  import (
    10  	"fmt"
    11  	"os"
    12  	"path/filepath"
    13  
    14  	"github.com/keybase/client/go/libkb"
    15  	keybase1 "github.com/keybase/client/go/protocol/keybase1"
    16  )
    17  
    18  // StopAllButService on windows can only stop those services which are not managed
    19  // by the watchdog, because this is intended to be called before the service is shut down,
    20  // and the watchdog dies when the service exists gracefully.
    21  func StopAllButService(mctx libkb.MetaContext, exitCode keybase1.ExitCode) {
    22  	var err error
    23  	defer mctx.Trace(fmt.Sprintf("StopAllButService()"),
    24  		&err)()
    25  	mountdir, err := mctx.G().Env.GetMountDir()
    26  	if err != nil {
    27  		mctx.Error("StopAllButService: Error in GetCurrentMountDir: %s", err.Error())
    28  	} else {
    29  		// open special "file". Errors not relevant.
    30  		exitFile := "\\.kbfs_unmount"
    31  		if exitCode == keybase1.ExitCode_RESTART {
    32  			exitFile = "\\.kbfs_restart"
    33  		}
    34  		unmountPath := filepath.Join(mountdir, exitFile)
    35  		mctx.Info("StopAllButService: opening %s", unmountPath)
    36  		_, err = os.Open(unmountPath)
    37  		if err != nil {
    38  			mctx.Debug("StopAllButService: unable to unmount kbfs (%s) but it might still have shut down successfully", err)
    39  		}
    40  		err = libkb.ChangeMountIcon(mountdir, "")
    41  		if err != nil {
    42  			mctx.Error("StopAllButService: unable to change mount icon: %s", err)
    43  		}
    44  	}
    45  }