PowerShell中用CefSharp/Chromium打开URL?加载DLL报错求解
解决PowerShell中加载CefSharp组件的报错问题
问题背景
生产环境中部分SQL报表通过计划任务执行,流程效率偏低。编写PowerShell脚本优化时,最初使用System.Windows.Forms.WebBrowser组件,但报表服务器针对Chrome优化,存在静态资源加载异常问题。改用CefSharp组件后,运行脚本出现无法加载CefSharp.Core.Runtime.dll的错误。
错误原因与解决步骤
1. 移除错误的Add-Type加载命令
CefSharp.Core.Runtime.dll是原生非托管DLL,不能用Add-Type命令加载——Add-Type仅适用于.NET托管程序集(如CefSharp.dll、CefSharp.Core.dll这类)。直接删除脚本中加载该DLL的那行代码即可。
2. 确保CefSharp依赖文件完整
从NuGet下载的CefSharp包,需将对应架构(x64)的所有原生文件复制到脚本运行目录,或添加到系统PATH:
- 找到
CefSharp.Common.123.0.60\CefSharp\x64目录,将其中所有文件(包括libcef.dll、CefSharp.Core.Runtime.dll、各类资源文件等)复制到脚本所在文件夹; - 或者将该x64目录路径添加到系统
PATH环境变量,让PowerShell能自动找到这些原生依赖。
3. 必须先初始化Cef环境
创建ChromiumWebBrowser实例前,必须先初始化Cef框架,否则会触发依赖加载失败。在脚本中添加初始化代码:
$settings = New-Object CefSharp.CefSettings # 指定浏览器子进程路径,需对应实际文件位置 $settings.BrowserSubprocessPath = "C:\temp\Monitor_Produktion\packages\CefSharp.Common.123.0.60\CefSharp\x64\CefSharp.BrowserSubprocess.exe" [CefSharp.Cef]::Initialize($settings) | Out-Null
4. 完整修正后的脚本
Add-Type -Path "C:\temp\Monitor_Produktion\packages\CefSharp.Common.123.0.60\lib\net462\CefSharp.Core.dll" Add-Type -Path "C:\temp\Monitor_Produktion\packages\CefSharp.WinForms.123.0.60\lib\net462\CefSharp.WinForms.dll" Add-Type -Path "C:\temp\Monitor_Produktion\packages\CefSharp.Common.123.0.60\lib\net462\CefSharp.dll" Add-Type -AssemblyName System.Windows.Forms # 初始化Cef环境 $settings = New-Object CefSharp.CefSettings $settings.BrowserSubprocessPath = "C:\temp\Monitor_Produktion\packages\CefSharp.Common.123.0.60\CefSharp\x64\CefSharp.BrowserSubprocess.exe" [CefSharp.Cef]::Initialize($settings) | Out-Null $form = New-Object System.Windows.Forms.Form $form.FormBorderStyle = 'None' $form.WindowState = 'Maximized' $form.Name = "ProduktionsMonitor" # 直接在构造函数中传入URL,替代Load方法 $browser = New-Object CefSharp.WinForms.ChromiumWebBrowser("www.google.de") $form.Controls.Add($browser) $form.ShowDialog() | Out-Null # 退出时清理Cef资源 [CefSharp.Cef]::Shutdown()
额外注意事项
- 确保运行脚本的PowerShell是x64架构:CefSharp的x64依赖无法在32位PowerShell环境中加载;
- 若通过计划任务执行脚本,需配置任务使用x64版本的PowerShell,并确保任务账号有足够权限访问CefSharp依赖文件目录。
内容的提问来源于stack exchange,提问作者JFR
相关产品推荐
相关产品推荐

