Reported from a Windows 10 machine: the process appears, no data folder is created, nothing starts. There was nothing to read because the only log OpsLog has lives inside the folder that was never created. Three exits happen before any window or log exists, and all three were silent. Another instance already running — correct to refuse, since two would fight over the rig, but indistinguishable from a crash. The data folder unwritable — it is created BESIDE the executable, so a copy dropped into Program Files is refused by Windows outright. And wails.Run failing, which is where a missing WebView2 runtime lands; its error went to println, which in a GUI-subsystem program goes nowhere at all. Each now writes to %LOCALAPPDATA%\OpsLog\startup.log — a folder Windows guarantees the user can write to, whatever OpsLog was installed into — and shows a message box naming the fault and what to do about it.
28 lines
862 B
Go
28 lines
862 B
Go
//go:build windows
|
|
|
|
package main
|
|
|
|
import (
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
// fatalBox shows a message box and returns.
|
|
//
|
|
// A GUI-subsystem program has no console: println goes nowhere, and a launch
|
|
// that ends before the window exists ends in complete silence. Every silent exit
|
|
// in main now says something here first — an operator who is told "another
|
|
// OpsLog is already running" can act on it; one who sees nothing files "it does
|
|
// not start", which is the report nobody can answer.
|
|
func fatalBox(title, text string) {
|
|
user32 := syscall.NewLazyDLL("user32.dll")
|
|
proc := user32.NewProc("MessageBoxW")
|
|
t, err1 := syscall.UTF16PtrFromString(text)
|
|
ti, err2 := syscall.UTF16PtrFromString(title)
|
|
if err1 != nil || err2 != nil {
|
|
return
|
|
}
|
|
const mbIconError = 0x00000010
|
|
proc.Call(0, uintptr(unsafe.Pointer(t)), uintptr(unsafe.Pointer(ti)), mbIconError)
|
|
}
|