5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-04 03:59:59 +08:00

[v2, windows] Fix WebView2 minimum runtime version check (#1456)

* [v2, windows] CompareBrowserVersions needs a int32 pointer

Otherwise 4294967295 will be returned instead of -1 and the
minimum version check can't detect an older version.
So an older version than the minimum might be used and will
result in AccessViolationExceptions.

* [v2, windows] Use the correct minimum runtime version for SDK 1.0.992.28

The Webview2Loader.dll are already at version 1.0.992.28 for all platforms.
This commit is contained in:
stffabi 2022-06-16 10:43:19 +02:00 committed by GitHub
parent 1e54eb2eaf
commit 884773a218
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 15 deletions

View File

@ -1,8 +1,9 @@
package edge package edge
import ( import (
"golang.org/x/sys/windows"
"unsafe" "unsafe"
"golang.org/x/sys/windows"
) )
// ICoreWebviewSettings is the merged settings class // ICoreWebviewSettings is the merged settings class
@ -27,17 +28,17 @@ type _ICoreWebViewSettingsVtbl struct {
PutIsZoomControlEnabled ComProc PutIsZoomControlEnabled ComProc
GetIsBuiltInErrorPageEnabled ComProc GetIsBuiltInErrorPageEnabled ComProc
PutIsBuiltInErrorPageEnabled ComProc PutIsBuiltInErrorPageEnabled ComProc
GetUserAgent ComProc GetUserAgent ComProc // ICoreWebView2Settings2: SDK 1.0.864.35
PutUserAgent ComProc PutUserAgent ComProc
GetAreBrowserAcceleratorKeysEnabled ComProc GetAreBrowserAcceleratorKeysEnabled ComProc // ICoreWebView2Settings3: SDK 1.0.864.35
PutAreBrowserAcceleratorKeysEnabled ComProc PutAreBrowserAcceleratorKeysEnabled ComProc
GetIsPasswordAutosaveEnabled ComProc GetIsPasswordAutosaveEnabled ComProc // ICoreWebView2Settings4: SDK 1.0.902.49
PutIsPasswordAutosaveEnabled ComProc PutIsPasswordAutosaveEnabled ComProc
GetIsGeneralAutofillEnabled ComProc GetIsGeneralAutofillEnabled ComProc
PutIsGeneralAutofillEnabled ComProc PutIsGeneralAutofillEnabled ComProc
GetIsPinchZoomEnabled ComProc GetIsPinchZoomEnabled ComProc // ICoreWebView2Settings5: SDK 1.0.902.49
PutIsPinchZoomEnabled ComProc PutIsPinchZoomEnabled ComProc
GetIsSwipeNavigationEnabled ComProc GetIsSwipeNavigationEnabled ComProc // ICoreWebView2Settings6: SDK 1.0.992.28
PutIsSwipeNavigationEnabled ComProc PutIsSwipeNavigationEnabled ComProc
} }

View File

@ -24,11 +24,10 @@ const (
) )
// CompareBrowserVersions will compare the 2 given versions and return: // CompareBrowserVersions will compare the 2 given versions and return:
// -1 = v1 < v2 // Less than zero: v1 < v2
// 0 = v1 == v2 // zero: v1 == v2
// 1 = v1 > v2 // Greater than zero: v1 > v2
func CompareBrowserVersions(v1 string, v2 string) (int, error) { func CompareBrowserVersions(v1 string, v2 string) (int, error) {
_v1, err := windows.UTF16PtrFromString(v1) _v1, err := windows.UTF16PtrFromString(v1)
if err != nil { if err != nil {
return 0, err return 0, err
@ -43,16 +42,16 @@ func CompareBrowserVersions(v1 string, v2 string) (int, error) {
return 0, err return 0, err
} }
var result int var result int32
_, _, err = memCompareBrowserVersions.Call( _, _, err = memCompareBrowserVersions.Call(
uint64(uintptr(unsafe.Pointer(_v1))), uint64(uintptr(unsafe.Pointer(_v1))),
uint64(uintptr(unsafe.Pointer(_v2))), uint64(uintptr(unsafe.Pointer(_v2))),
uint64(uintptr(unsafe.Pointer(&result)))) uint64(uintptr(unsafe.Pointer(&result))))
if err != windows.ERROR_SUCCESS { if err != windows.ERROR_SUCCESS {
return result, err return 0, err
} }
return result, nil return int(result), nil
} }
// GetInstalledVersion returns the installed version of the webview2 runtime. // GetInstalledVersion returns the installed version of the webview2 runtime.

View File

@ -8,7 +8,7 @@ import (
"github.com/wailsapp/wails/v2/pkg/options/windows" "github.com/wailsapp/wails/v2/pkg/options/windows"
) )
const MinimumRuntimeVersion string = "91.0.992.28" const MinimumRuntimeVersion string = "94.0.992.31" // Webview2 SDK 1.0.992.28
type installationStatus int type installationStatus int
@ -35,7 +35,7 @@ func Process(appoptions *options.App) (string, error) {
if err != nil { if err != nil {
return "", err return "", err
} }
updateRequired := compareResult == -1 updateRequired := compareResult < 0
// Installed and does not require updating // Installed and does not require updating
if !updateRequired { if !updateRequired {
return installedVersion, nil return installedVersion, nil