将Windows服务帐户应用程序分辨率扩展到1024 x 768以上



我在这里遇到了一个烦人的问题。我的设置如下:Windows Server 2022数据中心在Azure中作为虚拟机运行。我有一个正在运行的windows服务,它使用selenium Chrome Web驱动程序打开本地页面,并通过点击按钮导出pdf。这个运行良好,但pdf的分辨率很糟糕,因为浏览器的窗口大小只有1024 x 768,因为它位于我一直在阅读的windows服务上下文中,几乎就像一个没有屏幕的无头服务器。

现在我尝试了:

  • 在我的Chrome网络驱动程序代码中,为了最大化窗口,设置各种窗口大小,还没有任何东西适用于windows服务(当不是作为windows服务运行时,这很好,窗口大小会相应变化(
  • 一直在查看注册表项,例如来自以下位置的注册表项:https://superuser.com/questions/990398/setting-display-resolution-beyond-1024x768-with-headless-windows-10
  • 我也可以在本地机器上模拟这种行为
  • 尝试了";允许服务与桌面交互";但没有运气
  • 在";"无头";模式,但导致pdf导出问题,有人知道这是否允许设置您的窗口大小吗
  • 作为计划的Windows任务运行,但仍以相同的1024 x 768运行
  • 我看过SO提出的类似问题

很明显,以作为不同用户运行,即服务帐户可以工作,浏览器可以扩展到最大大小,但这是因为它不在windows服务上下文中。我将尝试以几种不同的方式运行该应用程序,不同的应用程序启动时会将其作为windows服务帐户运行,就像在新的windows服务中尝试启动我当前的应用程序一样。

有人在使用服务帐户时遇到过或解决过这样一个锁定分辨率为1024 x 768的问题吗?谢谢大家!

找到了解决方案!

因此,在尝试了上述操作后,没有任何reg编辑工作,也没有其他虚拟显示适配器工作。我更改了无头代码,我必须从这个善良的小伙子那里得到答案:https://stackoverflow.com/a/65397605/1426131而且效果很好!可以设置我想要的任何窗口大小。我以前迭代的无头chrome网络驱动程序代码不起作用。

这也将在Windows 10上本地运行,因此很容易测试是否有人遇到类似问题。

更新从上面的链接添加下面的代码:

public IWebDriver GetBrowserWebDriver(string browser)
{
IWebDriver currentDriver = null;        
switch (browser)
{
case "Chrome":                    
var options = new ChromeOptions();
options.AddArgument("headless");
string downloadPath = System.Environment.GetEnvironmentVariable("USERPROFILE") + "\Downloads";
options.AddUserProfilePreference("download.default_directory", downloadPath);
options.AddUserProfilePreference("profile.default_content_setting_values.automatic_downloads", 1);
options.AddArgument("--window-size=1920,1080");                    
currentDriver = new ChromeDriver(options);
break;
case "Firefox":
currentDriver = new FirefoxDriver();
break;
case "IE":
currentDriver = new InternetExplorerDriver(new InternetExplorerOptions() { IgnoreZoomLevel = true });
break;
default:
throw new NotSupportedException("");
}
return currentDriver;
}

所以我目前的使用方式是:

using (var driver = GetBrowserWebDriver("Chrome"))
{}

最新更新