Просмотр исходного кода

Merge pull request #2516 from dhiltgen/single_tray_app

Fix a couple duplicate instance bugs
Daniel Hiltgen 1 год назад
Родитель
Сommit
c3e62ba38a

+ 3 - 2
app/lifecycle/lifecycle.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"log"
 	"log/slog"
+	"os"
 
 	"github.com/jmorganca/ollama/app/store"
 	"github.com/jmorganca/ollama/app/tray"
@@ -58,8 +59,8 @@ func Run() {
 	}
 
 	if IsServerRunning(ctx) {
-		slog.Debug("XXX detected server already running")
-		// TODO - should we fail fast, try to kill it, or just ignore?
+		slog.Info("Detected another instance of ollama running, exiting")
+		os.Exit(1)
 	} else {
 		done, err = SpawnServer(ctx, CLIName)
 		if err != nil {

+ 2 - 1
app/lifecycle/updater_windows.go

@@ -48,7 +48,8 @@ func DoUpgrade(cancel context.CancelFunc, done chan int) error {
 	if done != nil {
 		<-done
 	} else {
-		slog.Warn("XXX done chan was nil, not actually waiting")
+		// Shouldn't happen
+		slog.Warn("done chan was nil, not actually waiting")
 	}
 
 	slog.Debug(fmt.Sprintf("starting installer: %s %v", installerExe, installArgs))

+ 4 - 0
app/ollama.iss

@@ -80,6 +80,8 @@ SignTool=MySignTool
 SignedUninstaller=yes
 #endif
 
+SetupMutex=OllamaSetupMutex
+
 [Languages]
 Name: "english"; MessagesFile: "compiler:Default.isl"
 
@@ -120,6 +122,8 @@ Type: filesandordirs; Name: "{%USERPROFILE}\.ollama"
 [Messages]
 WizardReady=Ollama Windows Preview
 ReadyLabel1=%nLet's get you up and running with your own large language models.
+SetupAppRunningError=Another Ollama installer is running.%n%nPlease cancel or finish the other installer, then click OK to continue with this install, or Cancel to exit.
+
 
 ;FinishedHeadingLabel=Run your first model
 ;FinishedLabel=%nRun this command in a PowerShell or cmd terminal.%n%n%n    ollama run llama2

+ 0 - 5
app/tray/wintray/eventloop.go

@@ -45,7 +45,6 @@ func nativeLoop() {
 		case 0:
 			return
 		default:
-			// slog.Debug(fmt.Sprintf("XXX dispatching message from run loop 0x%x", m.Message))
 			pTranslateMessage.Call(uintptr(unsafe.Pointer(m))) //nolint:errcheck
 			pDispatchMessage.Call(uintptr(unsafe.Pointer(m)))  //nolint:errcheck
 
@@ -66,11 +65,9 @@ func (t *winTray) wndProc(hWnd windows.Handle, message uint32, wParam, lParam ui
 		WM_MOUSEMOVE   = 0x0200
 		WM_LBUTTONDOWN = 0x0201
 	)
-	// slog.Debug(fmt.Sprintf("XXX in wndProc: 0x%x", message))
 	switch message {
 	case WM_COMMAND:
 		menuItemId := int32(wParam)
-		// slog.Debug(fmt.Sprintf("XXX Menu Click: %d", menuItemId))
 		// https://docs.microsoft.com/en-us/windows/win32/menurc/wm-command#menus
 		switch menuItemId {
 		case quitMenuID:
@@ -151,7 +148,6 @@ func (t *winTray) wndProc(hWnd windows.Handle, message uint32, wParam, lParam ui
 			slog.Debug(fmt.Sprintf("unmanaged app message, lParm: 0x%x", lParam))
 		}
 	case t.wmTaskbarCreated: // on explorer.exe restarts
-		slog.Debug("XXX got taskbar created event")
 		t.muNID.Lock()
 		err := t.nid.add()
 		if err != nil {
@@ -161,7 +157,6 @@ func (t *winTray) wndProc(hWnd windows.Handle, message uint32, wParam, lParam ui
 	default:
 		// Calls the default window procedure to provide default processing for any window messages that an application does not process.
 		// https://msdn.microsoft.com/en-us/library/windows/desktop/ms633572(v=vs.85).aspx
-		// slog.Debug(fmt.Sprintf("XXX default wndProc handler 0x%x", message))
 		lResult, _, _ = pDefWindowProc.Call(
 			uintptr(hWnd),
 			uintptr(message),

+ 1 - 1
docs/windows.md

@@ -14,7 +14,7 @@ As this is a preview release, you should expect a few bugs here and there.  If
 you run into a problem you can reach out on
 [Discord](https://discord.gg/ollama), or file an 
 [issue](https://github.com/ollama/ollama/issues).
-Logs will be often be helpful in dianosing the problem (see
+Logs will often be helpful in dianosing the problem (see
 [Troubleshooting](#troubleshooting) below)
 
 ## System Requirements

+ 1 - 0
scripts/build_windows.ps1

@@ -60,6 +60,7 @@ function buildOllama() {
             /csp "Google Cloud KMS Provider" /kc ${env:KEY_CONTAINER} ollama.exe
         if ($LASTEXITCODE -ne 0) { exit($LASTEXITCODE)}
     }
+    cp .\ollama.exe .\dist\ollama-windows-amd64.exe
 }
 
 function buildApp() {