5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-04 16:59:31 +08:00
wails/v2/internal/frontend/desktop/windows/go-webview2/webview2loader/versions.go
stffabi 3632ef9dc8
[webviewloader] Use go implementation to retrieve the version of a fixed runtime (#1790)
* [webview2loader] Start porting of OpenWebView2Loader to go

* [webviewloader] Use go implementation to retrieve the version of a fixed runtime

This fixes a problem with the go-winloader and using GetAvailableCoreWebView2BrowserVersionString

Fixes #1569

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2022-08-27 09:29:09 +10:00

70 lines
1.6 KiB
Go

package webview2loader
import (
"fmt"
"os"
"path/filepath"
"runtime"
)
// GetAvailableCoreWebView2BrowserVersionString get the browser version info including channel name.
func GetAvailableCoreWebView2BrowserVersionString(browserExecutableFolder string) (string, error) {
if browserExecutableFolder != "" {
clientPath, err := findEmbeddedClientDll(browserExecutableFolder)
if err != nil {
return "", err
}
return findEmbeddedBrowserVersion(clientPath)
}
return "", fmt.Errorf("not implemented yet for empty browserExecutableFolder ")
}
func findEmbeddedBrowserVersion(filename string) (string, error) {
block, err := getFileVersionInfo(filename)
if err != nil {
return "", err
}
info, err := verQueryValueString(block, "\\StringFileInfo\\040904B0\\ProductVersion")
if err != nil {
return "", err
}
return info, nil
}
func findEmbeddedClientDll(embeddedEdgeSubFolder string) (outClientPath string, err error) {
if !filepath.IsAbs(embeddedEdgeSubFolder) {
exe, err := os.Executable()
if err != nil {
return "", err
}
embeddedEdgeSubFolder = filepath.Join(filepath.Dir(exe), embeddedEdgeSubFolder)
}
return findClientDllInFolder(embeddedEdgeSubFolder)
}
func findClientDllInFolder(folder string) (string, error) {
arch := ""
switch runtime.GOARCH {
case "arm64":
arch = "arm64"
case "amd64":
arch = "x64"
case "386":
arch = "x86"
default:
return "", fmt.Errorf("Unsupported architecture")
}
dllPath := filepath.Join(folder, "EBWebView", arch, "EmbeddedBrowserWebView.dll")
if _, err := os.Stat(dllPath); err != nil {
return "", err
}
return dllPath, nil
}