Microsoft Edge WebView2で、ダウンロード時のポップアップが本来の位置からずれて表示される場合は、まずアプリのCSSや座標計算ではなく、実行中のWebView2 Runtimeのバージョンを確認してください。
Microsoftは、2026年8月3日に公開したWebView2 Preview Runtime 152.0.4181.0で、minimal-windowのダウンロードポップアップにおけるアンカー位置決めロジックを修正しています。基本的な対処は、修正を含むWebView2 Runtimeへ更新し、アプリを完全に再起動することです。(Microsoft Learn)
ただし、Runtimeの更新だけでなく、アプリ側で設定しているダウンロードダイアログの余白や配置、過去に追加した座標補正も確認する必要があります。本記事では、Runtimeの確認方法からEvergreen・Fixed Version別の更新手順、修正後も位置がずれる場合の切り分けまで具体的に解説します。
WebView2のダウンロードポップアップがずれる問題を修正
WebView2 Preview Runtime 152.0.4181.0のリリースノートには、バグ修正として次の内容が記載されています。
Fixed the anchoring logic for the minimal-window Download popup.
これは、minimal-windowで表示されるダウンロードポップアップについて、基準位置に固定するためのアンカー処理が修正されたことを意味します。(Microsoft Learn)
今回の修正内容を整理すると、次のとおりです。
| 確認項目 | 内容 |
|---|---|
| 対象 | minimal-windowで表示されるダウンロードポップアップ |
| 問題 | ポップアップのアンカー位置が正しく計算されない |
| 修正内容 | ポップアップの位置決めロジックを修正 |
| 修正が公式に記載されたRuntime | Preview Runtime 152.0.4181.0 |
| 公開日 | 2026年8月3日 |
| 基本対処 | 修正を含むRuntimeへ更新し、アプリを再起動する |
公式リリースノートでは、影響を受ける旧Runtimeの範囲や、ウィンドウサイズ、画面拡大率、マルチモニターなどの詳細な発生条件までは示されていません。そのため、「Runtime 151以前では必ず発生する」「特定のDPIだけで発生する」といった断定は避け、実際の利用環境で更新前後を比較する必要があります。
SDKではなくRuntimeの更新が重要
WebView2には、アプリが参照するSDKと、実際にブラウザー機能を実行するRuntimeがあります。
| 種類 | 役割 | 確認対象 |
|---|---|---|
| WebView2 SDK | C#やC++から利用するAPIを提供する | NuGetパッケージなど |
| WebView2 Runtime | Webコンテンツや組み込みUIを実際に描画する | 実行端末にあるRuntime |
| Microsoft Edge | 通常のWebブラウザー | WebView2 Runtimeとは別管理 |
今回のダウンロードポップアップ位置の修正は、SDKではなくRuntimeのリリースノートに記載されています。
そのため、NuGetのMicrosoft.Web.WebView2パッケージだけを更新しても、端末上で古いRuntimeが実行されていれば、位置決めロジックは更新されません。WebView2の変更は、内容によってRuntime、SDK、または両方の更新が必要です。(Microsoft Learn)
SDK 1.0.4181-prereleaseはRuntime 152に対応するSDKですが、ダウンロードポップアップの位置ずれに対する修正主体はPreview Runtime 152.0.4181.0です。SDKのバージョンだけを見て「修正済み」と判断しないことが重要です。(Microsoft Learn)
実行中のWebView2 Runtimeバージョンを確認する
端末にインストールされているRuntimeではなく、現在のWebView2環境が実際に使用しているバージョンを確認するのが確実です。
C#から実行中のRuntimeを確認する
WPFまたはWindows Formsでは、BrowserVersionStringから確認できます。
using System.Diagnostics;
await webView21.EnsureCoreWebView2Async();
string runtimeVersion =
webView21.CoreWebView2.Environment.BrowserVersionString;
Debug.WriteLine($"WebView2 Runtime: {runtimeVersion}");
BrowserVersionStringは、現在のCoreWebView2Environmentで使用しているRuntimeのバージョンを返します。Stable以外のチャネルを使用している場合は、Beta、Dev、Canaryなどのチャネル情報も含まれます。(Microsoft Learn)
アプリの問い合わせ画面や診断ログに、この値を出力しておくと、利用者ごとのRuntime差を確認しやすくなります。
string diagnosticText =
$"WebView2 Runtime: " +
webView21.CoreWebView2.Environment.BrowserVersionString;
「開発環境では直ったが、利用者のPCでは直らない」という場合は、最初にこの値を比較してください。
PowerShellでEvergreen Runtimeを確認する
64ビットWindowsでは、Evergreen WebView2 Runtimeのバージョンを次のPowerShellで確認できます。
$keys = @(
'HKLM:\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}',
'HKCU:\Software\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}'
)
$result = foreach ($key in $keys) {
if (Test-Path $key) {
$property = Get-ItemProperty -Path $key
[pscustomobject]@{
Scope = if ($key -like 'HKLM:*') {
'コンピューター全体'
} else {
'現在のユーザー'
}
Version = $property.pv
Path = $key
}
}
}
if ($result) {
$result | Format-Table -AutoSize
} else {
Write-Warning 'Evergreen WebView2 Runtimeの登録情報が見つかりません。'
}
Microsoftは、WebView2 Runtimeの有無とバージョンを確認する方法として、該当レジストリのpv値を参照する方法を案内しています。64ビットWindowsのコンピューター全体へのインストールではWOW6432Node配下、ユーザー単位ではHKEY_CURRENT_USER配下を確認します。(Microsoft Learn)
ただし、Fixed Version Runtimeはこのレジストリを使用しません。Fixed Versionを採用しているアプリでは、アプリ内のBrowserVersionStringを確認するか、browserExecutableFolderで指定しているRuntimeフォルダーを調べてください。(Microsoft Learn)
WebView2 Runtimeを更新する手順
更新方法は、Evergreen RuntimeとFixed Version Runtimeで異なります。
Evergreen Runtimeを使用している場合
Evergreen Runtimeは、通常はMicrosoft Edge Updateの仕組みによって自動更新されます。Microsoftは、多くのWebView2アプリにEvergreen方式を推奨しています。(Microsoft Learn)
対応手順は次のとおりです。
- 実行中のRuntimeバージョンを記録する
- Evergreen WebView2 Runtimeを更新する
- WebView2を使用しているアプリを完全に終了する
- アプリを再起動する
BrowserVersionStringで更新後のバージョンを確認する- 同じウィンドウサイズでダウンロードを再実行する
オンライン環境ではEvergreen Bootstrapper、オフライン環境ではEvergreen Standalone Installerを利用できます。BootstrapperやStandalone Installerは、管理者として実行するとコンピューター単位、通常実行ではユーザー単位のインストールになります。(Microsoft Learn)
サイレントインストールを行う場合の例は次のとおりです。
MicrosoftEdgeWebview2Setup.exe /silent /install
オフライン用のStandalone Installerでは、アーキテクチャに対応するインストーラーを使用します。
MicrosoftEdgeWebView2RuntimeInstallerX64.exe /silent /install
更新後はアプリの再起動が必要
Evergreen Runtimeの新しいバージョンがインストールされても、すでに起動中のアプリは古いWebView2環境を使い続けることがあります。
新しいRuntimeを使用するには、以前のWebView2環境への参照をすべて解放して作り直すか、アプリを再起動する必要があります。Microsoftも、更新後にアプリを再起動する方法を案内しています。(Microsoft Learn)
単にWebView2画面を閉じるだけでは、バックグラウンドのブラウザープロセスやCoreWebView2Environmentが残る場合があります。検証時は、次の順序で完全終了してください。
- WebView2を表示しているウィンドウを閉じる
- アプリ本体を終了する
- 必要に応じてタスクマネージャーでアプリのプロセス終了を確認する
- アプリを再起動する
BrowserVersionStringを再確認する
継続稼働する業務アプリでは、NewBrowserVersionAvailableイベントを監視し、更新が利用可能になった時点で再起動を案内する設計も有効です。
Fixed Version Runtimeを使用している場合
Fixed Version Runtimeは、アプリに特定バージョンのRuntimeを同梱する方式です。端末のEvergreen Runtimeを更新しても、アプリが同梱版を参照している限り、今回の修正は反映されません。
対応手順は次のとおりです。
- アプリが参照しているFixed Versionを確認する
- 位置決め修正を含むRuntimeを入手する
- アプリに同梱しているRuntime一式を置き換える
- 更新版アプリとして再配布する
- 更新前後でポップアップ位置を比較する
Fixed Versionは自動更新されません。開発者が新しいRuntimeをアプリに組み込み、アプリと一緒に配布する必要があります。(Microsoft Learn)
Preview Runtimeを本番環境へ直接配布しない
Preview Runtime 152.0.4181.0は、早期テスト向けとして公開されたRuntimeです。Microsoftは、Prerelease SDKの検証ではMicrosoft Edge Beta、Dev、Canaryなどのプレビューチャネルを利用し、正式版SDKではEvergreen WebView2 Runtimeを使用する構成を推奨しています。(Microsoft Learn)
したがって、実務上は次の流れが安全です。
| 環境 | 推奨対応 |
|---|---|
| 開発・検証環境 | Preview Runtime 152系で問題が解消するか確認する |
| 社内テスト環境 | ウィンドウサイズや画面拡大率を変えて回帰テストする |
| 本番環境 | 同じ修正を含む正式Runtimeを確認して展開する |
| Fixed Versionアプリ | 修正版Runtimeを同梱したアプリ更新として配布する |
不具合を急いで直すために、利用者全員の環境をBeta、Dev、Canaryへ切り替える運用は避けてください。Preview Runtimeは、原因確認と先行テストに利用するものとして扱うのが適切です。
Runtime更新後もずれる場合の確認ポイント
Runtimeを更新してもダウンロードポップアップの位置が直らない場合は、組み込みUIとアプリ独自UIを切り分けます。
| 状況 | 主な確認箇所 |
|---|---|
| WebView2標準のダウンロードUIがずれる | Runtimeバージョン、再起動、配置設定 |
| アプリが独自に作成したダウンロードUIがずれる | WPF、WinForms、HTML側の座標計算 |
| 特定のウィンドウサイズだけでずれる | WebViewのBounds、最小サイズ、余白 |
| 更新後に以前より大きくずれる | 過去に追加した回避用オフセット |
| 一部のPCだけで発生する | Runtime差、画面拡大率、複数モニター |
| Evergreenを更新しても変わらない | Fixed Version Runtimeを使用していないか |
独自ダウンロードUIか確認する
WebView2では、DownloadStartingイベントを処理して、アプリ独自のダウンロードUIを実装できます。
DownloadStartingEventArgs.Handledを設定して標準ダウンロードダイアログを無効化している場合、画面に表示されているものはWebView2標準UIではなく、アプリ独自UIである可能性があります。標準ダウンロードダイアログが無効化されている場合、Runtimeのアンカー修正だけでは独自UIの位置は変わりません。(Microsoft Learn)
次のような処理がないか確認してください。
webView21.CoreWebView2.DownloadStarting += (sender, args) =>
{
args.Handled = true;
// この後にアプリ独自のダウンロード画面を表示している場合、
// その画面の位置はアプリ側で管理する
};
CornerAlignmentとMarginを確認する
WebView2の既定ダウンロードダイアログは、次のプロパティで位置を設定できます。
DefaultDownloadDialogCornerAlignmentDefaultDownloadDialogMargin
既定位置はWebViewの右上です。配置先は左上、右上、左下、右下から選択できます。(Microsoft Learn)
一度、余白を0, 0へ戻して挙動を確認すると、Runtimeの問題とアプリ設定の問題を切り分けやすくなります。
using Microsoft.Web.WebView2.Core;
using System.Drawing;
await webView21.EnsureCoreWebView2Async();
CoreWebView2 core = webView21.CoreWebView2;
core.DefaultDownloadDialogCornerAlignment =
CoreWebView2DefaultDownloadDialogCornerAlignment.TopRight;
core.DefaultDownloadDialogMargin =
new Point(0, 0);
DefaultDownloadDialogMarginでは、正の値を指定するとWebViewの内側へ移動し、負の値を指定すると外側へ移動します。配置と余白は、最初のレイアウト計算に反映されるよう、初期化時に設定することが推奨されています。初期化後に変更した場合、次にWebViewの位置やサイズが変わるまで反映されないことがあります。(Microsoft Learn)
過去に追加した座標補正を外す
古いRuntimeの位置ずれを回避するため、次のような対応を追加している場合があります。
- ダウンロードダイアログのMarginを大きくする
- ウィンドウサイズに応じて座標を加算する
- DPI倍率を独自計算してオフセットする
- サイズ変更イベントでダイアログ位置を再設定する
- ポップアップ表示直後にWebViewのBoundsを変更する
修正版Runtimeではアンカー計算そのものが直るため、古い回避処理が残っていると、逆に二重補正となって位置がずれる可能性があります。
更新後の検証では、まず余白を0, 0に戻し、独自の補正処理を無効化した状態を基準にしてください。その後、カスタムタイトルバーやダウンロードボタンの位置に合わせて、必要な余白だけを設定します。
修正確認で実施したいテスト
ダウンロードポップアップの位置問題は、通常サイズのウィンドウだけで確認すると再発を見逃すことがあります。
最低限、次の条件でテストしてください。
| テスト条件 | 確認内容 |
|---|---|
| 最小ウィンドウサイズ | ポップアップがWebView外へはみ出さないか |
| 通常サイズ | 設定した角と余白に配置されるか |
| 最大化・元に戻す | ウィンドウ状態変更後も位置が維持されるか |
| ウィンドウの連続リサイズ | 古い座標に残らないか |
| 画面拡大率100%・125%・150% | 拡大率変更時に不自然なずれがないか |
| 複数モニター間の移動 | モニター移動後も正しく再配置されるか |
| 複数回のダウンロード | 2回目以降も同じ位置に表示されるか |
| カスタムタイトルバー | タイトルバーやボタンと重ならないか |
検証ログには、少なくとも次の情報を残しておくと原因を追いやすくなります。
アプリバージョン
WebView2 SDKバージョン
WebView2 Runtimeバージョン
EvergreenまたはFixed Version
Windowsの画面拡大率
ウィンドウサイズ
使用モニター
CornerAlignment
DefaultDownloadDialogMargin
よくある失敗と正しい対応
NuGetパッケージだけ更新する
SDKだけを更新しても、古いRuntimeが実行されていればRuntime内部の位置決め処理は変わりません。
BrowserVersionStringで実行中Runtimeを確認してください。
Microsoft Edgeだけ更新する
Microsoft EdgeブラウザーとWebView2 Runtimeは、更新管理が分かれています。Edgeの更新を止めてもWebView2 Runtimeは更新でき、反対にWebView2 Runtime側の更新が管理者ポリシーで止められている場合もあります。(Microsoft Learn)
Edgeのバージョンではなく、WebView2 Runtimeのバージョンを確認します。
Runtime更新後にアプリを再起動しない
起動中のWebView2環境は、更新前のRuntimeを使い続ける可能性があります。
更新後はアプリを完全終了して再起動し、再起動後のBrowserVersionStringを確認してください。
Fixed VersionなのにEvergreenだけ更新する
Fixed Versionアプリは、アプリに同梱されたRuntimeを使用します。
端末のEvergreen Runtimeではなく、アプリに同梱しているRuntimeを更新してください。
Preview Runtimeをそのまま本番配布する
Preview Runtime 152.0.4181.0は早期テスト向けです。
開発環境で修正効果を確認したうえで、本番では位置決め修正を含む正式Runtimeを採用します。
古い回避コードを残す
Runtimeのアンカー処理が修正された後も、以前の座標補正を残すと二重に位置が調整される可能性があります。
一度デフォルト設定に戻し、必要な余白だけを再設定してください。
WebView2のダウンロードポップアップ位置を直すための結論
WebView2のダウンロードポップアップがずれる場合は、次の順序で対応してください。
BrowserVersionStringで実行中Runtimeを確認する- 標準ダウンロードUIか独自UIかを切り分ける
- 修正を含むWebView2 Runtimeへ更新する
- アプリを完全に終了して再起動する
DefaultDownloadDialogCornerAlignmentとDefaultDownloadDialogMarginを確認する- 過去に追加した座標補正を無効化する
- 最小ウィンドウ、画面拡大率、複数モニターで再テストする
MicrosoftがPreview Runtime 152.0.4181.0で修正したのは、minimal-windowのダウンロードポップアップにおけるアンカー位置決めロジックです。アプリ側で座標を無理に調整する前に、まずRuntimeの更新状況を確認することが、最も確実で保守しやすい対処になります。(Microsoft Learn)

コメント