概要
特に需要はないかもしれないけどPowershellでブラウザ表示させて操作する必要があるかもしれない。
けれど標準のWebブラウザーコントロールだとIEで動作してしまうので、サポートとか表示の問題とかいらない心配をしたくないのでIEを使わないようにしようぜという話。
調べてみるとそんなに情報がなかったので備忘録として残しておきます。
目次
・準備
・WinFormsで動かす
・WPFで動かす
準備
VisualStudioのNugetでダウンロードし、そこから必要なコンポーネントを抜き出します。
適当なWPFアプリケーションを作成(WinFormsで動かしたい場合はWindowsフォームアプリケーションを作成)して[ツール]→[NuGet パッケージマネージャー]→[ソリューションのNuGetパッケージの管理]を開きます。
下記のパッケージをインストールします。
(依存関係で自動的にダウンロードされるものもあります)
・CefSharp.Common
・CefSharp.WinForms(WindFormsで動かす場合)
・CefSharp.Wpf(WPFで動かす場合)
・cef.redist(動かしたいビット数の方をインストールする)
↓の記事を見るとcef.redistのモジュールがいるとの事。
https://stackoverflow.com/questions/58006674/running-cefsharp-in-powershell
cef.redistのモジュールのダウンロード先の下記フォルダをコピーします。(64bit版の場合)
C:\Users\<ユーザー名>\\.nuget\packages\cef.redist.x64\\<バージョン番号>\CEF
コピーしてきたフォルダに以下のファイル(モジュール)を入れていきます。
C:\Users\<ユーザー名>\\.nuget\packages\cefsharp.common\\<バージョン番号>\runtimes\win-x64\lib\netcoreapp3.0
・CefSharp.Core.dll
・CefSharp.Core.Runtime.dll
・CefSharp.dll
C:\Users\<ユーザー名>\\.nuget\packages\cefsharp.common\\<バージョン番号>\CefSharp\x64
・CefSharp.BrowserSubprocess.Core.dll
・CefSharp.BrowserSubprocess.exe
C:\Users\<ユーザー名>\\.nuget\packages\cefsharp.wpf\\<バージョン番号>\lib\net452
・CefSharp.Wpf.dll
C:\Users\<ユーザー名>\\.nuget\packages\cefsharp.winforms\\<バージョン番号>\lib\net452
・CefSharp.WinForms.dll
これで動かす準備が整いました。
WinFormsで動かす
[準備]の項目で作ったフォルダ内にps1ファイルを作成して動作を確認してみます。
コード参考:https://stackoverflow.com/questions/58006674/running-cefsharp-in-powershell
(ここに記載のコードだけだと動作しなかったのでモジュール追記して動作するようにしています)
[System.Reflection.Assembly]::LoadFile("$PSScriptRoot\CefSharp.Core.dll")
[System.Reflection.Assembly]::LoadFile("$PSScriptRoot\CefSharp.Core.Runtime.dll")
[System.Reflection.Assembly]::LoadFile("$PSScriptRoot\CefSharp.WinForms.dll")
[System.Reflection.Assembly]::LoadFile("$PSScriptRoot\CefSharp.dll")
Add-Type -AssemblyName System.Windows.Forms
# WinForm Setup
$mainForm = New-Object System.Windows.Forms.Form
$mainForm.Font = "Comic Sans MS,9"
$mainForm.ForeColor = [System.Drawing.Color]::White
$mainForm.BackColor = [System.Drawing.Color]::DarkSlateBlue
$mainForm.Text = "CefSharp"
$mainForm.Width = 960
$mainForm.Height = 700
[CefSharp.WinForms.ChromiumWebBrowser] $browser = New-Object CefSharp.WinForms.ChromiumWebBrowser "www.google.com"
$mainForm.Controls.Add($browser)
[void] $mainForm.ShowDialog()
WPFで動かす
同じように[準備]の項目で作ったフォルダ内にps1ファイルを作成して動作を確認してみます。
[System.Reflection.Assembly]::LoadFile("$PSScriptRoot\CefSharp.Core.dll")
[System.Reflection.Assembly]::LoadFile("$PSScriptRoot\CefSharp.Core.Runtime.dll")
[System.Reflection.Assembly]::LoadFile("$PSScriptRoot\CefSharp.Wpf.dll")
[System.Reflection.Assembly]::LoadFile("$PSScriptRoot\CefSharp.dll")
Set-PSDebug -Strict
Add-Type -AssemblyName PresentationFramework
[xml]$xaml = @'
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WebBrowserTest"
xmlns:cef="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
Title="test" Height="720" Width="1280">
<Grid>
<cef:ChromiumWebBrowser Address="https://www.google.co.jp" />
</Grid>
</Window>
'@
$reader = New-Object System.Xml.XmlNodeReader $xaml
$frame = [System.Windows.Markup.XamlReader]::Load($reader)
$frame.ShowDialog()