签署 Centennial Program Addendum,使用 Desktop Bridge 将 Win32 应用转制成 UWP
原文 签署 Centennial Program Addendum,使用 Desktop Bridge 将 Win32 应用转制成 UWP
能上架 Windows 应用商店的并不一定必须是 UWP 应用程序或者 PWA 程序,也可以是普通的 Win32 应用程序。典型的上架应用商店的应用有微信、Telegram、Snipaste 等。使用 Desktop Bridge,我们即可以为我们的普通 Win32 应用程序做一个 UWP 的包来。
商店中那些转制的应用
如果你并没有感受到 Win32 转制的商店应用和原生的 UWP 或 PWA 应用有什么不同,可以尝试体验下面的三款转制应用。
- 微信 For Windows https://www.microsoft.com/store/productId/9NBLGGH4SLX7
- Telegram Desktop https://www.microsoft.com/store/productId/9NZTWSQNTD0S
- Snipaste https://www.microsoft.com/store/productId/9P1WXPKB68KX
了解 Desktop Bridge
Desktop Bridge,可能还可以叫做“桌面桥”,它存在的目的便是将已有的 WPF 程序、Windows Forms 程序和其他 Win32 应用转换成应用商店应用。而桌面桥提供了一种与 UWP 一致的 Windows 应用包,使用这种 Windows 应用包,普通的 Win32 应用也能访问 UWP 的 API。
需要注意的是,Desktop Bridge 要求的 Windows 系统最低版本为 1607。也就是说,如果要选择 SDK 的版本,需要选择 10.0.14393 或以上版本。
当然,并不是所有的 Win32 应用程序都支持直接转制到 UWP,如果应用会动态加载不在安装包中的 dll 或者会试图修改系统文件和配置,那么必须去掉这些代码才能完成转制。如果希望了解更多不支持的类型,建议阅读官方文档:Prepare to package an app (Desktop Bridge) - UWP app developer - Microsoft Docs。
在 Visual Studio 中创建 Windows 应用打包工程
使用 Visual Studio 打开原来的 Win32 程序的解决方案,在解决方案中新建一个 Windows 应用程序包项目(Windows Application Packaging Project)。我们将使用这个项目为转制应用打包。

在选择 SDK 时,目标版本我选择了 17134,但注意最低版本必须是 14393 或以上。

稍等片刻,我们便能看到 Visual Studio 已经为我们准备好的应用程序包工程。

在 Applications(应用程序)一栏我们右击选择添加引用。


随后展开 Applications(应用程序)一栏,将我们的 Win32 程序右击设为入口点。

编译刚刚设置好的打包项目。如果之前的项目能够编译通过,那么这个新的打包项目理论上也是能编译通过的。

将这个新项目设置为启动项目,启动它即可进行正常的调试,能够正常断点、单步等等。
修改包清单并发布应用
各种元数据
另外,转制的应用和原生的 UWP 应用一样,发布之前也需要为应用设计图标,设置应用显示名称、包名称、关联应用商店。

不得不说,为商店应用设计图标是一件非常繁杂的工作,不过,最终的效果确实非常喜人的。

需要注意,在 https://dev.windows.com 上发布应用时,由于我们是转制的应用,所以 runFullTrust 是必选项。如果你在提交应用时遇到了以下提示框,微软的官方文档提示无需写明理由。
This capability is also required for any desktop application that is delivered as an appx package (as with the Desktop Bridge), and it will automatically appear in your manifest when packaging these apps using the Desktop App Converter (DAC) or Visual Studio. You won’t need to request approval to use this capability if you already received permission using our form.

建议在给审核人员的提示中,写明我们是转制应用,以引起审核人员的注意。

通过认证
如果没有接受 Centennial Program Addendum,那么提交是不被允许的,并且在上传 appxupload 的时候会有警告开始提示了:
Package acceptance validation warning: You must contact partnerops@microsoft.com and get approval before you can submit this app.
当然,你可以忽略这样的警告继续提交,但那样的话最终认证会失败,并提示:
Notes To Developer
Your developer account has not been approved to submit apps converted with the Desktop Bridge as you have not yet accepted the Centennial Program Addendum. Please resubmit your request for approval.
如果无视警告,那么下次提交提示就会变成错误而不是警告了:
Package acceptance validation error: You need to accept the Centennial Program Addendum before you can submit this app.

▲ You need to accept the Centennial Program Addendum before you can submit this app.
提示要求我们必须同意 Centennial Program Addendum 协议,然而我们在 https://partner.microsoft.com/en-us/dashboard/windows/overview 的设置中点进去 Agreements 是找不到这项协议的。


以下划重点!!!
你需要先提交应用,并时常关注 https://partner.microsoft.com/en-us/dashboard/account/agreements 中是否会新增一项协议提示,就是下图这个:

当出现时,点击接受即可。这项协议在微软商店发给你的三天之内才会出现,超过三天还没有同意,这项协议就会自动移除。在我的实际提交中,等待邮件通知之时,三天基本上都过完了,所以稍微不及时收邮件,这项协议就点不开了,就只能看到下面这张图片感叹一声 —— 又要重来!

在同意了协议之后,你的协议列表中就会额外出现 Centennial Program Addendum 协议了。以后你可以继续提交转制应用。

参考资料
- Desktop Bridge - UWP app developer - Microsoft Docs
- App capability declarations - UWP app developer - Microsoft Docs
- “Package acceptance validation error” when you submit a UWP + Desktop Bridge app on the Store – App Consult Team
- Preparing a Desktop Bridge application for the Store submission – App Consult Team
[Publish your packaged desktop app to a Windows store or sideload it onto one or more devices. - UWP app developer Microsoft Docs](https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-distribute)
本文会经常更新,请阅读原文: https://walterlv.com/post/windows-desktop-bridge.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
签署 Centennial Program Addendum,使用 Desktop Bridge 将 Win32 应用转制成 UWP的更多相关文章
- UWP:记录一下这几天踩到的坑
最近在玩微软的Desktop Bridge项目,遇到了如下几个坑: 1.文档中给的是js项目魔改的方法,其实C#项目也可以魔改加入UWP部分的,区别在于: 不用在项目文件里写<AppxGener ...
- Bridge.NET
块作用域闭包问题 结果正确:1 容易引入JSB:1 public class Program { static List<Action> createActions() { List< ...
- 迁移桌面程序到MS Store(2)——Desktop App Converter
迁移传统桌面程序到MS Store的另一种方式是使用Desktop App Converter工具.虽然本篇标题包含了Desktop App Converter(以下简称DAC),实际上我是来劝你别用 ...
- 2020年的UWP(4)——UWP和等待Request的Desktop Extension
上一篇我们讨论了UWP和Desktop Extension交互中,Desktop Extension执行后立即退出的场景.下图是提到的四种场景分类: 执行后立即退出 等待request,处理完后退出 ...
- 利用 Win32 启动和检测 UWP App 的方法
一种启动和检测 UWP 应用的方法 背景 我们发布过多款 UWP 平台的同类型 App ,最近有一个需求:用传统 Win32 程序启动我们的 UWP 程序.因为我们的每一个UWP App在客户机器上都 ...
- [翻译].NET Core 3 Preview1和Windows桌面框架开源
原文来自TechViews 今天,我们宣布推出.NET Core 3 Preview 1.这是.NET Core 3的第一个公开发布.我们有一些令人兴奋的新功能可供分享,并希望得到您的反馈.您可以使用 ...
- UWP(二)调用Win32程序
目录 一.如何构建Win32程序 二.如何构建UWP工程? 三.Samples 一.如何构建Win32程序 打开csproj文件,使用如下代码添加引用(Reference).注意,如果指定位置不存在, ...
- SPOJ - OTOCI LCT
OTOCI Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/problem/viewProblem. ...
- Install TightVNC Server in RHEL/CentOS and Fedora to Access Remote Desktops
Virtual Networking Computing (VNC) is a Kind of remote sharing system that makes it possible to take ...
随机推荐
- 一些mysql innodb的建议
http://blog.csdn.net/yunhua_lee/article/details/8239145 原文:http://dev.mysql.com/doc/refman/5.5/en/in ...
- [Docker] Create Docker Volumes for Persistent Storage
Docker containers are stateless by default. In order to persist filesystem changes, you must use doc ...
- wireshark分析包中关于三次握手和四次终止标识
转自: http://hi.baidu.com/hepeng597/item/5ba27e0b98bc8de3ff240de0 三次握手Three-way Handshake 一个虚拟连接的建立是通过 ...
- 23、V4L2应用编写及各个ioctl涉及结构体说明分析
常用的结构体在内核目录include/linux/videodev2.h中定义 struct v4l2_requestbuffers //申请帧缓冲,对应命令VIDIOC_REQBUFSstruct ...
- Qt 信号-槽的同步与异步处理
通常使用的connect,实际上最后一个參数使用的是Qt::AutoConnection类型:Qt支持6种连接方式.当中3中最主要: 1.Qt::DirectConnection(直连方式)(信号与槽 ...
- hadoop配置文件的加载机制 分类: A1_HADOOP 2015-01-21 11:29 839人阅读 评论(0) 收藏
hadoop通过Configuration类来保存配置信息 1.通过Configuration.addResource()来加载配置文件 2.通过Configuration.get***()来获取配置 ...
- 如何在电脑上播放iso映像文件
http://blog.sina.com.cn/s/blog_4a20485e0102e5ya.html
- HDU1575-Tr A(矩阵高速幂)
题目链接 题意:A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. 思路:简单的矩阵高速幂 代码: #include <iostream> #i ...
- 字符串函数(strcpy字符串拷,strcmp字符串比较,strstr字符串查找,strDelChar字符串删除字符,strrev字符串反序,memmove拷贝内存块,strlen字符串长度)
1.strcpy字符串拷贝拷贝pStrSource到pStrDest,并返回pStrDest地址(源和目标位置重叠情况除外) char *strcpy(char *pStrDest, const ch ...
- Opencv在视频中静态、动态方式绘制矩形框ROI
Opencv视频处理中的目标跟踪经常用到要在视频上画一个矩形框ROI,标注出要跟踪的物体,这里介绍两种在视频中绘制矩形框的方法,一种是"静态的",一种是"动态的" ...