none
How to use UIAutomation APIs for UWP? RRS feed

  • 问题

  • Win32 program would not run in win 10 S?

    So I want to transplantation my win32 automated testing tool to UWP.

    But when I use the UIAutomation APIs in UWP, I get the errors:

    发生了 System.Windows.Automation.ElementNotAvailableException
    内部异常 1:
    TypeInitializationException: The type initializer for 'System.Windows.Automation.Automation' threw an exception.
    内部异常 2:
    COMException: Creating an instance of the COM component with CLSID {FF48DBA4-60EF-4201-AA87-54103EEF594E} using CoCreateInstanceFromApp failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). Please make sure your COM object is in the allowed list of CoCreateInstanceFromApp.

    I find the CoCreateInstanceFromApp in MSDN, 

    The CoCreateInstanceFromApp function reads class registrations only from application contexts, and from the HKLM\SOFTWARE\Classes\CLSID registry hive.

    • Only built-in classes that are supported in the app container are supplied. Attempts to activate unsupported classes, including all classes installed by 3rd-party code as well as many Windows classes, result in error code REGDB_E_CLASSNOTREG.
    • The CoCreateInstanceFromApp function is available to Windows Store apps. Desktop applications can call this function, but they have the same restrictions as Windows Store apps.

    I use "regedit" check, the class is under HKLM\SOFTWARE\Classes\CLSID

    I try to add "<rescap:Capability Name="runFullTrust" />" to Package.appxmanifest file, but it can't work.

    So what should I do

     

     

    2017年10月27日 6:34

答案

  • 原来微软早就为我们想到,使用 Windows.ApplicationModel.FullTrustProcessLauncher 调用win32的程序就行了。

    https://docs.microsoft.com/en-us/uwp/api/Windows.ApplicationModel.FullTrustProcessLauncher

    • 已标记为答案 CoolRain 2017年11月4日 9:33
    2017年11月4日 9:33

全部回复

  • 您好,

    我不是很清楚你说的移植你的win32程序到UWP到底是怎么样移植的。

    通常有两种做法:

    1. 完全建一个新的UWP项目去完整的开发一个新的UWP版本的应用

    2. 运用 桌面桥 工具去转化你的win32应用到UWP.

    这两种方法你都需要注意,不是所有的.net APIs都在UWP里适用的,你需要检查并替换一些在UWP里不适用的API。

    具体请参考这个文档:适用于 UWP 应用的 .NET 如果你发现你想用的API在UWP中不支持,那么需要找些其他的API来替换。

    这是UWP中UI Automation相关的API: https://docs.microsoft.com/zh-cn/uwp/api/windows.ui.xaml.automation



    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.




    2017年10月31日 1:58
  • Xavier Eoro , 谢谢您的回答。

    我的移植方法是使用第一种: 完全建一个新的UWP项目去完整的开发一个新的UWP版本的应用。

    我查看了 “适用于 UWP 应用的 .NET” 的文档,未找到想要的API,看起来只能另谋他路。

    而  https://docs.microsoft.com/zh-cn/uwp/api/windows.ui.xaml.automation 说明的是UWP 作为被控制方,为其他控制程序提供的自动化API接口。

    2017年11月1日 1:41
  • 原来微软早就为我们想到,使用 Windows.ApplicationModel.FullTrustProcessLauncher 调用win32的程序就行了。

    https://docs.microsoft.com/en-us/uwp/api/Windows.ApplicationModel.FullTrustProcessLauncher

    • 已标记为答案 CoolRain 2017年11月4日 9:33
    2017年11月4日 9:33