0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PowershellでWebBrowser(CefSharp)を動かす

Last updated at Posted at 2021-05-18

概要

特に需要はないかもしれないけど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

ファイルをかき集めるとこんな感じになります。
file.png

これで動かす準備が整いました。

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()
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?