You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否不创建WebView2浏览器控件实例获取用户数据文件夹及运行时路径?

WebView2:无浏览器控件实例下的用户数据文件夹与运行时路径获取

一、不创建浏览器控件实例获取用户数据文件夹

你当前的代码是从已初始化的ICoreWebView2Environment7接口获取用户数据文件夹,实际上不需要创建WebView浏览器控件实例(ICoreWebView2),仅通过创建CoreWebView2Environment环境实例即可实现需求。

实现代码

#include <wil/com.h>
#include <WebView2.h>

void GetUserDataFolderWithoutWebView()
{
    wil::com_ptr<ICoreWebView2Environment> environment;
    HRESULT hr = CreateCoreWebView2EnvironmentWithOptions(
        nullptr,        // 使用默认WebView2运行时位置
        nullptr,        // 留空则系统生成默认用户数据文件夹;自定义路径可在此填写
        nullptr,        // 使用默认环境选项
        Callback<ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler>(
            [](HRESULT result, ICoreWebView2Environment* env) -> HRESULT {
                if (SUCCEEDED(result)) {
                    // 查询ICoreWebView2Environment7接口以获取用户数据文件夹
                    wil::com_ptr<ICoreWebView2Environment7> environment7;
                    if (SUCCEEDED(env->QueryInterface(IID_PPV_ARGS(&environment7)))) {
                        wil::unique_cotaskmem_string userDataFolder;
                        HRESULT hr = environment7->get_UserDataFolder(&userDataFolder);
                        if (SUCCEEDED(hr)) {
                            // 输出或使用用户数据文件夹路径
                            wprintf(L"User Data Folder: %s\n", userDataFolder.get());
                        }
                    }
                }
                return S_OK;
            }).Get());
}

说明

  • 仅初始化CoreWebView2Environment环境实例,未创建任何WebView浏览器控件(ICoreWebView2对象),满足“不创建浏览器控件实例”的要求。
  • 若给CreateCoreWebView2EnvironmentWithOptions的第二个参数指定自定义路径,get_UserDataFolder会返回该路径;若留空,则返回系统自动生成的默认用户数据文件夹路径。

二、不创建浏览器实例获取运行时路径

直接使用WebView2 SDK提供的GetCoreWebView2BrowserPath函数,无需创建任何Environment或WebView实例,即可获取当前系统中可用的WebView2运行时安装路径。

实现代码

#include <wil/com.h>
#include <WebView2.h>
#include <iostream>

std::wstring GetRuntimePathWithoutInstance()
{
    wil::unique_cotaskmem_string browserPath;
    HRESULT hr = GetCoreWebView2BrowserPath(nullptr, &browserPath);
    if (SUCCEEDED(hr)) {
        return browserPath.get();
    }
    // 处理获取失败的情况
    return L"";
}

// 调用示例
int main()
{
    std::wstring runtimePath = GetRuntimePathWithoutInstance();
    if (!runtimePath.empty()) {
        std::wcout << L"WebView2 Runtime Path: " << runtimePath << std::endl;
    }
    return 0;
}

补充:无实例获取版本信息

你已提供的版本信息获取代码均为无实例调用,这里做汇总说明:

获取运行时版本

std::wstring GetRuntimeVersion()
{
    wil::unique_cotaskmem_string runtimeVersion;
    GetAvailableCoreWebView2BrowserVersionString(nullptr, &runtimeVersion);
    return runtimeVersion.get();
}

获取SDK构建版本

std::wstring GetSdkBuild()
{
    auto options = Microsoft::WRL::Make<CoreWebView2EnvironmentOptions>();
    wil::unique_cotaskmem_string targetVersion;
    CHECK_FAILURE(options->get_TargetCompatibleBrowserVersion(&targetVersion));

    // 解析版本字符串提取构建号部分
    const wchar_t* targetVersionMajorAndRest = targetVersion.get();
    const wchar_t* targetVersionMinorAndRest = wcschr(targetVersionMajorAndRest, L'.');
    CHECK_FAILURE((targetVersionMinorAndRest != nullptr && *targetVersionMinorAndRest == L'.') ? S_OK : E_UNEXPECTED);

    const wchar_t* targetVersionBuildAndRest = wcschr(targetVersionMinorAndRest + 1, L'.');
    CHECK_FAILURE((targetVersionBuildAndRest != nullptr && *targetVersionBuildAndRest == L'.') ? S_OK : E_UNEXPECTED);

    return targetVersionBuildAndRest + 1;
}

内容的提问来源于stack exchange,提问作者Andrew Truckle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 09:44:51