Существуют ли какие-либо зависимости для автоматизации пользовательского интерфейса?

У меня есть приложение Windows, которое захватывает детали с экрана на основе конфигурации. Я использую автоматизацию пользовательского интерфейса для захвата деталей с экрана. Все отлично работает на машине разработчика, где установлена ​​Visual Studio. Когда я запускаю то же приложение в другой системе, где у нас установлена ​​только .NET Framework 4.5, оно начинает вести себя странно и не может обнаружить дочерний элемент.

Мой вопрос в том, почему он отлично работает на машине разработчика, где установлены Visual Studio и .NET Framework. Какая разница? Есть ли что-то, что мы упускаем из предварительных условий? Какие-либо зависимости от автоматизации пользовательского интерфейса или какой-либо библиотеки, которой нам не хватает..?

Заранее спасибо - помогите пожалуйста.


person Ravi Kanth    schedule 28.02.2017    source источник


Ответы (2)


Похоже на известную ошибку в оболочке .NET вокруг нативной UIAutomationCore.dll (да, ее ядро ​​не является .NET). И он включен в WinVista+ (.NET Framework также добавляет его даже в WinXP).

Вот пример C# как использовать нативный COM API (UIAutomationCore.dll) из C#. Просто скопируйте код сюда:

using System;
using interop.UIAutomationCore;

namespace PrintDesktopUiaElementNameViaCom
{
    class PrintDesktopUiaElementNameViaComProgram
    {
        static void Main(string[] args)
        {
            // Instantiate the UIA object:
            IUIAutomation _automation = new CUIAutomation();
            // Get the root element
            IUIAutomationElement rootElement = _automation.GetRootElement();
            // Get its name
            string rootName = rootElement.CurrentName;
            Console.WriteLine(
                "The root automation element's name should be 'Desktop'.");
            Console.WriteLine("The actual value is: '{0}'", rootName);
        }
    }
}
person Vasily Ryabov    schedule 05.03.2017
comment
К вашему сведению, я получил это, используя nuget.org/packages/Interop.UIAutomationClient и используя Interop.UIAutomationClient - person Jon R; 20.11.2020

Да, наконец, прочитав дневное чтение, я узнал, что решение состоит в том, что der не зависит от Visual Studio.

Такое поведение связано с отсутствием привилегий для приложения. поэтому, чтобы преодолеть это поведение, мы должны подписать наше приложение, и еще одна очень важная вещь - поместить исполняемый файл в Program Files.

Справочные ссылки: https://msdn.microsoft.com/en-us/library/windows/desktop/ee671610(v=vs.85).aspx

person Ravi Kanth    schedule 15.03.2017