我的第一个想法是使用GetPackageFamilyName()
和ERROR_SUCCESS
vs APPMODEL_ERROR_NO_PACKAGE
。
但是,我需要支持Windows 7,这使得GetPackageFamilyName()
无法使用。
是否有不错的替代方法?注册表中有没有东西?
答案 0 :(得分:5)
使用GetProcAddress()
在运行时动态加载GetPackageFamilyName()
,例如:
typedef LONG WINAPI (*LPFN_GPFN)(HANDLE, UINT32*, PWSTR);
bool bIsUWP = false;
LPFN_GPFN lpGetPackageFamilyName = (LPFN_GPFN) GetProcAddress(GetModuleHandle(TEXT("kernel32")), "GetPackageFamilyName");
if (lpGetPackageFamilyName)
{
UINT32 size = 0;
if (lpGetPackageFamilyName(GetCurrentProcess(), &size, NULL) == ERROR_INSUFFICIENT_BUFFER)
bIsUWP = true;
}
if (bIsUWP)
{
//...
}
else
{
//...
}
或者,考虑使用GetCurentPackage...()
函数之一(GetCurrentPackageFamilyName()
,GetCurrentPackageId()
,GetCurrentPackageInfo()
等),而不是将GetPackageFamilyName()
与{{1 }}到调用过程。
答案 1 :(得分:2)
GetPackageFamilyName是正确的方法。为了支持Windows 7,您可以首先检查是否在Win7上运行。如果是这样,则说明您未打包。仅当您使用的是版本> 7时,才调用GetPackageFamilyName来检查是否已打包。
答案 2 :(得分:0)
这是来自Microsoft的带有示例的文章,它也应该支持Windows 7。