【发布时间】:2017-04-30 15:11:38
【问题描述】:
有什么方法可以在 UWP 项目中安装 win32 应用程序吗?(由于在 uwp 项目中我无法添加 wmi 调用和注册表的引用)。如果是,它是如何实现的?
【问题讨论】:
标签: c# windows-store-apps uwp
有什么方法可以在 UWP 项目中安装 win32 应用程序吗?(由于在 uwp 项目中我无法添加 wmi 调用和注册表的引用)。如果是,它是如何实现的?
【问题讨论】:
标签: c# windows-store-apps uwp
经典的win32应用程序可以通过读取注册表来获取设备上已安装的win32应用程序。但在商店应用程序中,简而言之,它不能。商店应用程序在隔离的沙箱中运行,无法读取系统级注册表。商店应用不支持访问注册表的详细原因请参考this thread。
但是,如果您不想将应用上传到 Windows 应用商店,则可以试用代理 Windows 运行时组件以用于侧面加载的 Windows 应用商店应用。本质上,它允许您的 UWP 应用调用托管在不同进程中的 Win32 API,该进程在 App 容器之外运行。
对于 VS2015 的代理 WinRT 组件模板,您可以下载here。
有关代理 Windows 运行时组件的更多详细信息和示例,请参考 this video 和 this document。
【讨论】:
有什么方法可以在系统中安装 uwp 应用程序?我尝试使用 PackageManager 类 bt 它不起作用。还有其他方法吗?我不想使用 powershell。
为了获得安装的商店应用程序,我已经测试了 PackageManager 类。它运行良好,据我所知,这是安装商店应用程序的最佳方式。代码如下:
var packageManager = new PackageManager();
IEnumerable<Windows.ApplicationModel.Package> packages = (IEnumerable<Windows.ApplicationModel.Package>)packageManager.FindPackagesForUser("");
var list = packages.ToList();
注意这些在 uwp 上运行的代码需要packageManagement 受限的能力。有关特殊和受限功能的更多详细信息this。并且您的应用无法上传到 windows 商店。
要在传统 Win32 项目中使用此代码,只需参考 this document 中的示例即可。
【讨论】: