有没有办法绕过某些API上的UWP限制? 我已经尝试创建一个Windows -10C++的UWP XAML应用程序。 我选择这个平台的动机是避免使用多种语言(对于WPF GUI,C++ + CLI用于互操作),只使用C++,用C++ +CX。

有没有办法绕过某些API上的UWP限制? 我已经尝试创建一个Windows -10C++的UWP XAML应用程序。 我选择这个平台的动机是避免使用多种语言(对于WPF GUI,C++ + CLI用于互操作),只使用C++,用C++ +CX。,uwp,win-universal-app,windows-10-universal,c++-cx,c++-winrt,Uwp,Win Universal App,Windows 10 Universal,C++ Cx,C++ Winrt,我的目标是创建一个用于调试PCI驱动程序的内部工具,而不是创建某种高度安全的windows应用商店应用程序 在我看来,UWP应用程序在使用一些WIN API函数时非常受限。例如,我不能使用静态库,因为它们使用CreateFile&DeviceIoControl。我得到一个错误,上面写着:错误C3861:'CreateFileA':找不到标识符 即使我设法链接我的本机库(通过在.cpp文件中隐藏这些函数的使用),这些函数在运行时似乎也会失败 有没有办法绕过这些限制? 我只想使用这个平台来提供C++

我的目标是创建一个用于调试PCI驱动程序的内部工具,而不是创建某种高度安全的windows应用商店应用程序

在我看来,UWP应用程序在使用一些WIN API函数时非常受限。例如,我不能使用静态库,因为它们使用CreateFile&DeviceIoControl。我得到一个错误,上面写着:
错误C3861:'CreateFileA':找不到标识符

即使我设法链接我的本机库(通过在.cpp文件中隐藏这些函数的使用),这些函数在运行时似乎也会失败

有没有办法绕过这些限制?
我只想使用这个平台来提供C++的UI功能。p> 为这个坏消息感到抱歉。事实上,如果您不符合上述限制,您的选择就不是UWP。改用WPF


UWP应用程序用于集中控制。因此,您可以通过Store分发它们,限制它们的文件系统访问,管理内存占用和生存期等。您可以将其视为试图停止Win32 API(它非常陈旧、容易被黑客攻击且无政府主义),并使用沙盒作为替代品。

对于这个坏消息,非常抱歉。事实上,如果您不符合上述限制,您的选择就不是UWP。改用WPF

UWP应用程序用于集中控制。因此,您可以通过存储分发它们,限制它们的文件系统访问,管理内存占用和生存期等。您可以将其视为试图中断Win32 API(它非常陈旧、容易被黑客攻击且无政府主义),并使用沙盒作为替代品。

许多“陈旧”win32函数仍然可用或已在Windows 1803中可用。以UWP API为目标当然不同于Win32 API。Microsoft的官方支持Win32 API列表位于:

CreateFileA不在该列表中,但CreateFile2在该列表中

对于设备访问,UWP在名称空间Windows.Devices.Custom中提供了功能

LoadLibrary\GetProcAddress也可以是一个解决方案

大多数限制只适用于上传到商店的UWP应用程序,而不适用于并行加载的应用程序。您只需创建包并将其放在本地网络共享或http服务器上即可。

许多“旧”win32功能仍然可用,或已在Windows 1803中可用。以UWP API为目标当然不同于Win32 API。Microsoft的官方支持Win32 API列表位于:

CreateFileA不在该列表中,但CreateFile2在该列表中

对于设备访问,UWP在名称空间Windows.Devices.Custom中提供了功能

LoadLibrary\GetProcAddress也可以是一个解决方案


大多数限制只适用于上传到商店的UWP应用程序,而不适用于并行加载的应用程序。您只需创建包并将其放在本地网络共享或http服务器上即可。

确实是一条新闻。很遗憾这些限制不是可选的。@NinaKaprez:如果这些限制是可选的,那么没有人会选择加入限制自己,我们仍然会继续编写需要以管理员权限运行的应用程序。另一方面,您可以从常规Windows桌面应用程序访问大部分UWP API界面。我相信剩余的部分也可以使用,最明显的是UI。目前,您需要使用桌面网桥。有关更多详细信息,请参阅。@NinaKaprez:在中已经讨论过这个问题。我不确定现在的情况。支持的选项是使用桌面网桥技术,如我之前发布的链接所述。如果桌面网桥不适用于您的用例,您应该在GitHub问题链接的UserVoice条目上留下评论,解释原因。从你的问题来看,桌面网桥似乎是一个合适的解决方案,然而。对于IPC问题,桌面网桥通常是一个可怕的解决方案。您必须将通常是同步API的东西包装在异步代理周围,同时引入数不清的开销。忘记UWP,使用WPF。@NinaKaprez更新桌面应用程序的UWP用户界面,看起来确实令人失望。很遗憾这些限制不是可选的。@NinaKaprez:如果这些限制是可选的,那么没有人会选择加入限制自己,我们仍然会继续编写需要以管理员权限运行的应用程序。另一方面,您可以从常规Windows桌面应用程序访问大部分UWP API界面。我相信剩余的部分也可以使用,最明显的是UI。目前,您需要使用桌面网桥。有关更多详细信息,请参阅。@NinaKaprez:在中已经讨论过这个问题。我不确定现在的情况。支持的选项是使用桌面网桥技术,如我之前发布的链接所述。如果桌面网桥不适用于您的用例,您应该在GitHub问题链接的UserVoice条目上留下评论,解释原因。从你的问题来看,桌面网桥似乎是一个合适的解决方案,然而。对于IPC问题,桌面网桥通常是一个可怕的解决方案。您必须将通常是同步API的东西包装在异步代理周围,同时引入数不清的开销。忘记UWP,使用WPF。@NinaKaprez更新桌面应用程序的UWP UI,看一看,试试UWP桌面桥接应用程序这里真正的问题是众所周知的“蠕虫罐头”-xaml+idl 3.0+cppwinrt。。。。与过去的win32相比,这是更好的未来吗?为什么不使用xaml+idl3.0+cppwinrt组合制作非uwp桌面gui应用程序?同样重要。为什么