我有使用 UIAutomation 的代码,可以在控制台应用程序中找到,但我需要它作为服务运行。该服务负责确保 3 个 exes 在给定的机器上运行并且配置正确。用 C++ 编写的 exe 没有 COM 或 .net 入口点。
var k = Process.GetProcessesByName("genericEXE");
foreach (var win in k)
{
List<string> scol = new List<string>();
AutomationElement cpc = AutomationElement.RootElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ProcessIdProperty, win.Id));
if (cpc == null)
continue;
WalkEnabledElements(cpc, scol);
if (scol.Contains("COM1") && scol.Contains("COM2") && scol.Contains("COM3") && scol.Contains("COM4") && scol.Contains("COM5"))
foundCom1 = true;
if (scol.Contains("COM6") && scol.Contains("COM7") && scol.Contains("COM8") && scol.Contains("COM9") && scol.Contains("COM10"))
foundCom6 = true;
if (scol.Contains("COM11") && scol.Contains("COM12") && scol.Contains("COM13") && scol.Contains("COM14") && scol.Contains("COM15"))
foundCom11 = true;
}
static void WalkEnabledElements(AutomationElement rootElement, List<string> col)
{
TreeWalker walker = new TreeWalker(Condition.TrueCondition);
AutomationElement elementNode = walker.GetFirstChild(rootElement);
while (elementNode != null)
{
Console.WriteLine(elementNode.Current.Name);
col.Add(elementNode.Current.Name);
WalkEnabledElements(elementNode, col);
elementNode = walker.GetNextSibling(elementNode);
}
}
我尝试以在此运行时登录的同一用户身份运行该服务,尝试在打开交互 w/ 桌面位的情况下作为本地服务运行。我从来没有从
AutomationElement cpc = AutomationElement.RootElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ProcessIdProperty, win.Id));
线。有人知道我需要做些什么不同的事情吗?