c# – Windows 10:区分预装的应用程序和下载的应用程序
作者:互联网
我的一个客户与OEM达成了协议.他们的应用程序X将预装在许多笔记本电脑上.此应用程序将从Windows 10商店接收更新.此应用程序X还可以在Windows 10商店中下载给其他用户.只有使用预装版本的用户才能获得3个月的免费试用.
不幸的是,OEM没有提供任何设备ID,并且用户没有获得任何解锁代码用于他们的试用.我想出了以下最初的“解决方案”:
>将1.0.1.0版用于预安装的应用程序.
>将1.0.0.0上传到商店.
当应用程序启动且版本为1.0.1.0时,它被标识为预安装版本,此时我可以进行服务器调用以将设备ID发送到客户端的服务器,以便在应用删除后识别该设备.
我可以更新商店应用程序而不会丢失任何预装应用程序的知识,因为我可以更新到1.0.1.0以下的任何版本.这意味着预安装版本不会被自动更新与商店版本覆盖(因为安装的版本号大于商店版本).但是,如果在预安装的版本中检测到严重错误,我无法更新该应用程序或某类用户将无法获得免费试用.也就是说,在Windows 10之前尚未在设备上启动应用程序的用户使用新版本(例如1.0.1.1)更新应用程序.
这听起来不必要地复杂,我希望它是.任何人都可以想到一种更简单的方法来区分预装和下载的版本是否万无一失?
谢谢!
解决方法:
由于您已经在考虑提供2个不同的版本,因此这个版本可能是更好的解决方案,您可以在其中部署1.0.0.0版本的两倍.
不使用版本来区分状态,而是使用构建符号.
创建两个不同的构建,一个用于OEM客户端,另一个用于存储部署.
对于要允许试用的OEM,请使用以下内容 – 例如:
private bool CanUseTrial()
{
#if OEM
return true;
#else
return false;
#endif
}
这样做将允许您为所有客户端维护相同的代码库,但在OEM和案例存储部署之间存在差异,而不需要太多逻辑.
编辑#1:
为了解决OEM客户端更新到非OEM客户端的问题,您仍然可以采用这种方法(只要应用程序至少运行一次作为#OEM构建):
private async Task<bool> CanUseTrial()
{
var clientCode = GenerateClientCode(); // However you're going to do this
#if OEM
WebServiceXyz.RegisterOemClient(clientCode);
return true;
#else
try
{
return await WebServiceXyz.IsRegisteredOemClient(clientCode);
}
catch
{
return false;
}
#endif
}
标签:c,windows-10,windows-8-1,windows-10-mobile 来源: https://codeday.me/bug/20190708/1400069.html