我有一些用于从Chrome中提取网址的C#代码。 它通常适用于Win7 / Win 8.1,但在一些具有相同配置的计算机上它不起作用。并且,可能这些配置之间没有区别。 为什么会这样?
Process[] procsChrome = Process.GetProcessesByName("chrome");
foreach(Process chrome in procsChrome)
{
if(chrome.MainWindowHandle == IntPtr.Zero)
{
continue;
}
AutomationElement mainWindow = AutomationElement.FromHandle(chrome.MainWindowHandle);
elmUrlBar = mainWindow.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit));
//elmUrlBar on some computers inited, on some NULL. But versions of Chrome are identical.
...
}
答案 0 :(得分:0)
这可能是Windows安全问题。 Windows中有一些安全性可以禁用从一个应用程序到另一个应用程序的通信,称为用户帐户控制(UAC)。
如果您通常以管理员身份启动Visual Studio,那么生成运行应用程序的子进程也会被提升,您的自动化可能会起作用。
由于UAC,在另一台计算机上尝试它可能会失败。或者它可能在已禁用某些UAC设置的计算机上成功。
在失败的机器上,我会尝试暂时禁用UAC,如上所述here,如果它现在有效,那么你知道这就是问题所在。实际上,即使启用了UAC,也可以通过向应用程序添加清单here来使其正常运行。
答案 1 :(得分:0)
(1)您是否确认在应用程序失败的情况下Chrome已启用辅助功能?它必须从Chrome的命令行启用,或者为各个标签打开。
(2)您可能违反了用户界面权限隔离(UIPI)。如果您正在运行管理员登录,这不是问题,但使用标准登录时,绕过UIPI的要求是: