.net CefSharp浏览器在登录屏幕上不作为WPF屏幕保护程序使用 使用CefSharp的WPF屏幕保护程序在登录屏幕中失败
我想创建一个WPF屏幕保护程序,使用CefSharp来显示网站。我安装了屏幕保护程序,并使用InnoSetup在注册表中进行了所有必要的更改。 更改如下:.net CefSharp浏览器在登录屏幕上不作为WPF屏幕保护程序使用 使用CefSharp的WPF屏幕保护程序在登录屏幕中失败,.net,wpf,inno-setup,cefsharp,.net,Wpf,Inno Setup,Cefsharp,我想创建一个WPF屏幕保护程序,使用CefSharp来显示网站。我安装了屏幕保护程序,并使用InnoSetup在注册表中进行了所有必要的更改。 更改如下: [Registry] Root:HKU; Subkey:".DEFAULT\Control Panel\Desktop"; ValueType: string; ValueName: "SCRNSAVE.EXE"; ValueData:"{app}\{#MyAppExeName}";
[Registry]
Root:HKU; Subkey:".DEFAULT\Control Panel\Desktop"; ValueType: string; ValueName: "SCRNSAVE.EXE"; ValueData:"{app}\{#MyAppExeName}"; Components: login both
Root:HKU; Subkey:".DEFAULT\Control Panel\Desktop"; ValueType: string; ValueName: "ScreenSaveTimeOut"; ValueData:"30"; Components: login both
Root:HKU; Subkey:".DEFAULT\Control Panel\Desktop"; ValueType: string; ValueName: "ScreenSaverIsSecure" ; ValueData:"0"; Components: login both
Root:HKU; Subkey:".DEFAULT\Control Panel\Desktop"; ValueType: string; ValueName: "ScreenSaveActive"; ValueData:"1"; Components: login both
Root:HKCU; Subkey:"Control Panel\Desktop"; ValueType: string; ValueName: "SCRNSAVE.EXE"; ValueData:"{app}\{#MyAppExeName}"; Components: desktop both
Root:HKCU; Subkey:"Control Panel\Desktop"; ValueType: string; ValueName: "ScreenSaveTimeOut"; ValueData:"30"; Components: desktop both
Root:HKCU; Subkey:"Control Panel\Desktop"; ValueType: string; ValueName: "ScreenSaverIsSecure" ; ValueData:"0"; Components: desktop both
Root:HKCU; Subkey:"Control Panel\Desktop"; ValueType: string; ValueName: "ScreenSaveActive"; ValueData:"1"; Components: desktop both
提供的代码是.iss文件的一部分。
我的问题是,屏幕保护程序在我的桌面和锁屏上都可以正常工作。
但是,在登录屏幕中,它会启动,然后失败,出现以下两个代码:
.NET运行时版本4.0.30319.0-初始化失败
分析API连接基础结构。此过程将不允许
要附加的探查器。HRESULT:0x80004005。进程ID(十进制):11004。
消息ID:[0x2509]
应用程序:ScreensaverWPF.scr框架版本:v4.0.30319
描述:由于未处理的异常,进程已终止。
异常信息:异常代码e0000008,异常地址
00007FF9668F3E49
代码来自事件查看器
我还没有添加try-catch语句。但是,我试图保存WerFault.exe通常会创建的.dmp文件。WerFault.exe通过一个小脚本保存.dmp文件,该脚本故意崩溃,但不会为屏幕保护程序创建任何文件。在注册表中,我创建了一个名为:Computer\HKEY\u LOCAL\u MACHINE\SOFTWARE\Microsoft\Windows\Windows错误报告\LocalDumps\ScreensaverWPF.scr
我配置了密钥,如中所述:
我怎样才能解决这个问题
这是我的密码:
using System;
using System.Windows;
using System.Windows.Input;
using CefSharp;
using CefSharp.Wpf;
namespace ScreensaverWPF
{
public partial class MainWindow : Window
{
private Point mousePoint;
private string link;
public void InitializeChromium()
{
if (!Cef.IsInitialized)
{
CefSettings settings = new CefSettings();
Cef.Initialize(settings);
browser = new ChromiumWebBrowser();
}
}
public MainWindow()
{
InitializeComponent();
InitializeChromium();
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
link = "https://www.google.de/";
WindowState = WindowState.Maximized;
Mouse.OverrideCursor = Cursors.None;
browser.Load(link);
}
private void MainWindowKeyDown(object sender, KeyEventArgs e)
{
Application.Current.Shutdown();
}
private void MainWindowMouseDown(object sender, MouseButtonEventArgs e)
{
Application.Current.Shutdown();
}
private void MainWindow_OnMouseMove(object sender, MouseEventArgs e)
{
Point startPoint = new Point(0,0);
Point currenPoint = e.GetPosition(overlay);
if (!mousePoint.Equals(startPoint))
{
if (Math.Abs(mousePoint.X - currenPoint.X) > 5 || Math.Abs(mousePoint.Y - currenPoint.Y) > 5)
{
Application.Current.Shutdown();
}
}
mousePoint = currenPoint;
}
private void MainWindow_OnMouseWheel_(object sender, MouseWheelEventArgs e)
{
Application.Current.Shutdown();
}
}
}
我怎样才能解决这个问题
似乎您首先需要更多信息,因为您不知道是什么导致了该问题
CEF将编写一个名为debug.log
的文件。不幸的是,在会话0(登录屏幕)中,此文件试图写入C:\Windows\System32\debug.log
,无法访问
作为一种解决方法,您可以使用以管理员模式运行的编辑器创建该文件。确保使用未虚拟化的64位应用程序(否则将在C:\Windows\SysWOW64\debug.log
中创建文件)
创建文件后,以NT AUTHORITY\LOCAL SERVICE
可以访问的方式更改权限。我刚刚向每个人授予了如下完全权限:
[1123/211039.508:ERROR:core_audio_util_win.cc(427)] Failed to create Core Audio device enumerator on thread with ID 10016
现在,注销并让屏幕保护程序再次运行。显示错误消息后,关闭屏幕保护程序并再次登录。请查看debug.log
。它可能包含如下错误:
[1123/211039.508:ERROR:core_audio_util_win.cc(427)] Failed to create Core Audio device enumerator on thread with ID 10016
我认为这可以通过使用关闭音频来缓解
CefSettings settings = new CefSettings();
settings.CefCommandLineArgs.Add("mute-audio", "true");
Cef.Initialize(settings);
但不幸的是,这没有帮助
在您发现并修复问题后,不要忘记删除
debug.log
。您可以添加一些try-catch语句并将任何异常记录到磁盘上吗?我想知道您看到的异常是否掩盖了实际的错误。只是信息不足,我甚至无法推测。是否有其他屏幕保护程序使用这种方法工作?你的尝试可能吗?看看是否有其他人有一个铬屏幕保护程序可以工作我不知道是否有可能为登录屏幕制作一个铬屏幕保护程序。这就是我打开这个问题的原因。如上所述,这个屏幕保护程序在我的桌面和锁定屏幕上都可以正常工作。我找不到一篇有人ne使用chromium实现了一个可用的登录屏幕保护程序。为了便于参考,您可以配置日志文件的创建位置,有几个命令行参数可能值得测试,我会尝试一些