之前跑去做了一年多的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. PHPsocket、CURL、File_get_contents采集

    1.socket采集.采用最底层的,它只是建立一个长连接,然后我们自己构造http协议字符串去发送请求.例如想获取这个页面内容(http://tv.youku.com/?spm=a2hww.20023 ...

  2. Android Jetpack 概述

    Android Jetpack Overview Android Jetpack Jetpack is a set of libraries, tools and architectural guid ...

  3. 深度学习原理与框架-Tfrecord数据集的读取与训练(代码) 1.tf.train.batch(获取batch图片) 2.tf.image.resize_image_with_crop_or_pad(图片压缩) 3.tf.train.per_image_stand..(图片标准化) 4.tf.train.string_input_producer(字符串入队列) 5.tf.TFRecord(读

    1.tf.train.batch(image, batch_size=batch_size, num_threads=1) # 获取一个batch的数据 参数说明:image表示输入图片,batch_ ...

  4. Java中的包装数据类型

    基本类型 包装器类型 boolean Boolean char Character int Integer byte Byte short Short long Long float Float do ...

  5. MFC笔记8

    1.在循环使用数组时需要清理数组 CString str; memset(str,0,strlen(str)); 判断两个字符串包含数字大小是否相等 CString str="22" ...

  6. 用element-ui 时,报value.getTime is not a function错误:

    在用element-ui 时,报value.getTime is not a function错误:错误分析:date-picker 的时间是格林威时间,如果Thu Jun 22 2017 19:07 ...

  7. DB2 公共表表达式(WITH语句的使用)

    ----start 说起WITH 语句,除了那些第一次听说WITH语句的人,大部分人都觉得它是用来做递归查询的.其实那只是它的一个用途而已,它的本名正如我们标题写的那样,叫做:公共表表达式(Commo ...

  8. extern和include的作用

    首先要搞清楚的是.h头文件中都是一些声明性的语句,是不分配内存的,所以头文件中有对函数的声明,有define语句,有没有实例化的结构体定义,但是没有对变量的定义(比如 int a),有的只是对外变量的 ...

  9. 转)Ubuntu16.04下安装DDD(Data Display Debugger)

    以下转自:http://www.linuxdiyf.com/linux/26393.html   前两天在Linux论坛偶然间看到了DDD这个软件,根据介绍是一个gdb界面化的调试软件,这正是我找了好 ...

  10. AFNetWorking 源码粗浅理解

    最近在看AFNetWorking的源码,整理出自己的一点思路.先从一个最简单的网络请求看: NSString *urlStr = [NSString stringWithFormat:@"h ...