之前跑去做了一年多的iOS开发,被XCode恶心得不行。做人呢,最重要的是开心。所以我就炒了公司鱿鱼,挪了个窝回头去做Windows开发了。
        UWP什么的很久没有正儿八经写了,国内的需求非常少。传统的桌面开发倒是因为人越来越少了,需求还在,有少量还不错的职位。现在在做WPF的项目,公司层面倒是很愿意迁移到UWP,但是迁移起来会有很多的困难和限制。同时有这方面热情,且知道怎么去做的人就更少了。
        接下来会通过几个短篇来介绍如何通过Desktop Bridge来迁移桌面程序到MS Store,这块的学习我还没有深入,祈祷一下不会很快就太监了……

其实如果仅仅是要求把exe打包成appx的话,权限方面并没有什么特殊的要求。但是默认情况下,如果需要提交商店并通过审核的话,应用程序需要能够运行在Windows 10 S模式下。MSDN的原话是
All apps submitted to the Microsoft Store must be compatible with Windows 10 S. Apps that aren't compatible won't be accepted in the store.
        这个就比较严格了,简单举例如下:

  • APP不能要求admin权限
  • APP不能包含Windows Service
  • APP不能像exe程序那样直接在运行目录写文件
  • APP不能直接运行另一个exe程序

以上这些在传统桌面程序中算是常见了,所以只要稍微复杂一点的exe程序,在迁移的时候就会遇到各种各样的问题。
        今天的第一篇我们首先来处理一下最简单的情况,即移植一个标准的,同时符合商店权限要求的WPF程序。
        第一步我们先创建一个空的WPF工程。运行起来是一个空白的窗体。工程文件结构也很简单,见Solution Explorer。

接下来我们要创建一个Packaging工程来对WPF工程进行打包,最终通过Packaging工程来生成APPX文件。可以在Windows Universal目录下找到Windows Application Packaging Project。

点击OK创建完成后,记得要在Applications中添加对WPF工程的引用。同时我们还可以看到Images文件夹下对应的图片,是转换完成后的磁贴图标。不更新的话在开始菜单里就是默认的方块叉图标。

通过Visual Studio添加Packaging工程的优点是,我们可以方便的调试原来的WPF程序。这里我们将启示项目Startup Project设置为SimpleWpfAppPackaging后,按F5运行是可以直接调试SimpleWpfApp工程的。我们可以加个断点试试,体验可以说是无缝链接必须好评了。成功运行程序后,你会在开始菜单中发现SimpleWpfAppPackaging。

再接着就是创建APPX等文件提交商店了。Packaging工程上通过右键菜单Store -> Create App Packages… 再往后的流程就是和纯的UWP工程一模一样了。

假设我们给APPX的名字也命名为SimpleWpfAppPackaging,那么我们可以得到以下APPXUPLOAD文件。这个文件就是提交到商店进行审核的最终文件。

本篇先做了一个最基本的介绍,希望能留下对迁移工程的初步印象,后面我们会接着讨论一般情况下,迁移工作可能会遇到的问题和解决方案。
        本篇相关代码地址:

https://github.com/manupstairs/DesktopBridgeSamples

迁移桌面程序到MS Store(1)——通过Visual Studio创建Packaging工程的更多相关文章

  1. 迁移桌面程序到MS Store(5)——.NET Standard

    接下来的几篇,我想讨论下迁移桌面程序到MS Store,可以采用的比较常见.通用性比较强的实施步骤和分层架构. 通常商业项目一般都是不断的迭代,不太可能突然停止更新现有的桌面版本,然后花很长时间从头来 ...

  2. 迁移桌面程序到MS Store(8)——通过APPX下载Win32Component

    在上一篇<迁移桌面程序到MS Store(7)——APPX + Service>中,我们提到将desktop application拆分成UI Client+Service两部分.其中UI ...

  3. 迁移桌面程序到MS Store(9)——APPX With Desktop Extension

    在<迁移桌面程序到MS Store(8)——通过APPX下载Win32Component>中我们讨论了通过APPX来下载Service部分的安装包.但是纯UWP的客户端并不能自动运行下载的 ...

  4. 迁移桌面程序到MS Store(10)——在Windows S Mode运行

    首先简单介绍Windows 10 S Mode,Windows在该模式下,只能跑MS Store里的软件,不能通过其他方式安装.好处是安全有保障,杜绝一切国产流氓软件.就像iOS一样,APP进商店都需 ...

  5. 迁移桌面程序到MS Store(12)——WPF使用UWP InkToolbar和InkCanvas

    我们在<迁移桌面程序到MS Store(4)——桌面程序调用Win10 API>提到了对Win10 API的调用,但仍存在无法在WPF中使用UWP控件的问题,虽然都是XAML控件,但却是两 ...

  6. 迁移桌面程序到MS Store(13)——动态检查Win10 API是否可用

    假设我们现有一个WPF程序,需要支持1903以前的Windows 10版本.同时在1903以后的版本上,额外多出一个Ink的功能.那么我们就可以通过ApiInformation.IsApiContra ...

  7. 迁移桌面程序到MS Store(14)——APPX嵌入WCF Service以Admin权限运行

    Windows10 1809版本开始,微软又对UWP开放了新的Capability:AllowElevation. 通过这个新的Capability,UWP APP能够在运行时向用户请求Admin权限 ...

  8. 迁移桌面程序到MS Store(7)——APPX + Service

    本篇我们以一个Sample工程,来说明如何把一个常见结构的desktop application,转制成APPX并在MS Store提供下载. 之前的篇章中,我们已经介绍了一些内容,包括如何通过Vis ...

  9. 迁移桌面程序到MS Store(2)——Desktop App Converter

    迁移传统桌面程序到MS Store的另一种方式是使用Desktop App Converter工具.虽然本篇标题包含了Desktop App Converter(以下简称DAC),实际上我是来劝你别用 ...

随机推荐

  1. Rhythmk 一步一步学 JAVA(6): JSP 语法学习笔记

    1.修改JSP页面模版: 找到MyEclips安装目录,搜索“Jsp.vtl”,找到该文件修改编码,以及一些不需要用到的代码. 2.查找项目生成的Servlet文件路径: 查看当前项目父级目录搜索 . ...

  2. oracle查看被锁的表和解锁

    --以下几个为相关表SELECT * FROM v$lock;SELECT * FROM v$sqlarea;SELECT * FROM v$session;SELECT * FROM v$proce ...

  3. K8s之Etcd

    Etcd是一个开源的.高可用的.分布式的键值对数据存储系统,提供共享配置.服务的注册和发现.etcd与zookeeper相比算是轻量级系统,两者的一致性协议也一样,etcd的raft比zookeepe ...

  4. 一个nginx 回源限速的bug处理过程记录

    一个生产环境,nginx占用cpu很高. top - :: up day, :, users, load average: 13.26, 13.20, 13.20 Tasks: total, runn ...

  5. 微信小程序实现计算器功能

    page { height:100%;} .calculator { width: 100%; height: 100vh; border:solid 1px; background: rgb(238 ...

  6. json 异常

    com.google.gson.JsonSyntaxException: 1530842820000 1530842820000 是服务器直接返回的Date值由 Gson 解析后出来的值. 后台发出: ...

  7. 配置远程主机http服务器 打包资源

    <1> 搭建nginx  验证nginx是否启动成功 https://blog.csdn.net/wdsdsdsds/article/details/51179780 https://ww ...

  8. Ubuntu安装pyucharm的专业版本

    看到了不错的教程,亲测有效. https://www.cnblogs.com/huozf/p/9304396.html

  9. Python开发——基础

    注释 单行注释 # 被注释的内容 多行注释 """ 被注释的内容 """ 解释器路径 #!/usr/bin/env python # 用于L ...

  10. 64位Redhat系统应用(c++代码)搭建-使用informix和g++编译

    这篇博客很有必要写下来,记录我在一个比较原生的Linux系统上搭建一套应用所遇到的各种问题和各种坑. 关于这套应用,算是我离职前的一个项目,不完成的话没有办法交差,同时,这个项目也比较紧,合作行一直在 ...