如何编程判断VS2017开发的WinJS应用是私有商店下载还是侧载?
判断WinJS应用的安装来源(商店/侧载)
当然可以实现!对于你用Visual Studio 2017开发的HTML/JavaScript WinJS应用,UWP平台提供了直接的API来区分应用是从私有企业商店下载,还是通过侧载安装的。下面是两种可靠的实现方式:
方法一:通过installerPackageFamilyName判断(推荐,无需网络)
这是最直接且可靠的本地判断方式。当应用从商店(包括私有企业商店)安装时,系统会记录安装它的商店包家族名;而侧载安装的应用,这个属性会是空值。
在你的WinJS应用中,可以用以下JavaScript代码实现:
function detectInstallationSource() { const currentPackage = Windows.ApplicationModel.Package.current; const installerFamilyName = currentPackage.installerPackageFamilyName; if (installerFamilyName) { // 应用来自私有企业商店或公共Microsoft Store console.log("应用是从私有企业商店下载安装的"); // 你可以在这里执行商店专属的逻辑 } else { // 应用是侧载安装的 console.log("应用是通过侧载方式安装的"); // 执行侧载场景的逻辑 } }
这个方法不需要网络请求,完全在本地完成判断,而且对私有企业商店的适配性很好——因为私有商店本质上属于Microsoft Store的企业分发渠道,安装时会留下对应的安装标识。
方法二:通过应用收据判断(需要网络)
另一种方式是尝试获取应用的商店收据。从商店安装的应用可以通过API获取到有效的收据内容,而侧载应用通常无法获取到(或返回无效结果)。不过这个方法需要联网,且依赖商店服务的可用性,适合需要同时验证合法性的场景:
async function checkAppReceipt() { try { const receipt = await Windows.ApplicationModel.Store.CurrentApp.getAppReceiptAsync(); if (receipt) { console.log("应用来自商店"); } else { console.log("应用是侧载安装的"); } } catch (error) { // 获取收据失败,大概率是侧载应用 console.log("应用是侧载安装的,无法获取商店收据"); } }
注意事项
- 两种方法都不需要额外申请应用权限,默认即可访问这些API。
- 对于私有企业商店的应用,
installerPackageFamilyName会返回企业商店对应的包家族名,而非公共Store的,不影响判断逻辑。
内容的提问来源于stack exchange,提问作者TKoL
相关产品推荐
相关产品推荐

