迁移桌面程序到MS Store(10)——在Windows S Mode运行
首先简单介绍Windows 10 S Mode,Windows在该模式下,只能跑MS Store里的软件,不能通过其他方式安装。好处是安全有保障,杜绝一切国产流氓软件。就像iOS一样,APP进商店都需审核,同时APP在沙盒环境下,以普通用户权限运行,不能偷偷摸摸地干坏事,抢占资源的情况也不会发生,自然体验流畅,系统性能提升。一切都是那么的美好,但Windows S Mode就是没有人用……
这个悲剧真是不好说,也许是用户习惯,也许是违背人性,同时侵犯了厂商(要审核,要分成)和用户的利益(很多软件、游戏装不了,D版软件更不用想)。再考虑到MS Store本身就不太丰富的APP,哎妈我也不想去用什么S Mode……
但是你要想嘛,某软当初是有手机的,还有XBOX也能运行UWP APP的(越说越生气)。现在惨是惨了点,但保不准10月2日又蹦出来什么奇葩设备,ARM的只能UWP,或者低功耗设备只能MS Store,于是再续一秒……还有传输中的折叠设备,Windows Core OS等等,所以确保一个APP能在Windows 10 S Mode下运行,也许还是有那么一丢丢的意义(强行洗地)……
因为这个系列的主题是迁移桌面程序到MS Store,而纯UWP本就可以在S Mode运行,所以本篇我们要讨论的,是通过APPX With Desktop Extension的方式,将已有的桌面程序在S Mode运行。
接下来我们来说如何进行S Mode下的测试,因为并不是只要通过desktop bridge的方式打包成APPX,就一定可以成功在S Mode运行。
除了专门弄一台Windows 10 S Mode的机器来测试以外,根据官方文档,我们还可以在Window 10 Pro通过配置来模拟S Mode。
https://docs.microsoft.com/zh-cn/windows/msix/desktop/desktop-to-uwp-test-windows-s
文档中描述了审核模式(Audit mode policy),生产模式(Production mode policy)和自签名生产模式(Product mode policy with self-signed apps)。后两者是真的把你的Windows 10 Pro设置成S Mode,所以我们先看审核模式,通过文档上的链接下载审核模式的策略文件SiPolicy_Audit.p7b,重命名为SIPolicy,然后贴到C:\Windows\System32\CodeIntegrity\, 重启系统。
完成后,就可以测试将要在S Mode运行的APP,然后去Event Viewer里查看是否有错误信息。

可以在下图中看到,系统认为Firefox.exe不符合S Mode的要求,但因为是审核模式,所以allowed to load。

接下来我准备闷声作大死,把SiPolicy_Enforced.p7b拷贝过去应用生产模式。在更新文件名并重启后,我试图点击《迁移桌面程序到MS Store(9)——APPX With Desktop Extension》中包含的DotNetConsoleApp.exe,惨遭系统拒绝执行。

如果我们从商店下载包含DotNetConsoleApp.exe的AppxWithDesktopExSample1的话,则可以顺利运行。

下图可以看到Console的窗口标题指出了DotNetConsoleApp.exe的绝对路径。

本篇我们简单介绍了Windows 10 S Mode,并讨论了如何在S Mode下测试APP运行状态。后续我们会尝试如何在S Mode要求管理员权限。
GitHub地址:
https://github.com/manupstairs/AppxWithDesktopExtension
MS Store:
https://www.microsoft.com/store/productid/9N22D8RLKZN2
迁移桌面程序到MS Store(10)——在Windows S Mode运行的更多相关文章
- 迁移桌面程序到MS Store(5)——.NET Standard
接下来的几篇,我想讨论下迁移桌面程序到MS Store,可以采用的比较常见.通用性比较强的实施步骤和分层架构. 通常商业项目一般都是不断的迭代,不太可能突然停止更新现有的桌面版本,然后花很长时间从头来 ...
- 迁移桌面程序到MS Store(1)——通过Visual Studio创建Packaging工程
之前跑去做了一年多的iOS开发,被XCode恶心得不行.做人呢,最重要的是开心.所以我就炒了公司鱿鱼,挪了个窝回头去做Windows开发了. UWP什么的很久没有正儿八经写了,国内的需求 ...
- 迁移桌面程序到MS Store(12)——WPF使用UWP InkToolbar和InkCanvas
我们在<迁移桌面程序到MS Store(4)——桌面程序调用Win10 API>提到了对Win10 API的调用,但仍存在无法在WPF中使用UWP控件的问题,虽然都是XAML控件,但却是两 ...
- 迁移桌面程序到MS Store(13)——动态检查Win10 API是否可用
假设我们现有一个WPF程序,需要支持1903以前的Windows 10版本.同时在1903以后的版本上,额外多出一个Ink的功能.那么我们就可以通过ApiInformation.IsApiContra ...
- 迁移桌面程序到MS Store(8)——通过APPX下载Win32Component
在上一篇<迁移桌面程序到MS Store(7)——APPX + Service>中,我们提到将desktop application拆分成UI Client+Service两部分.其中UI ...
- 迁移桌面程序到MS Store(9)——APPX With Desktop Extension
在<迁移桌面程序到MS Store(8)——通过APPX下载Win32Component>中我们讨论了通过APPX来下载Service部分的安装包.但是纯UWP的客户端并不能自动运行下载的 ...
- 迁移桌面程序到MS Store(14)——APPX嵌入WCF Service以Admin权限运行
Windows10 1809版本开始,微软又对UWP开放了新的Capability:AllowElevation. 通过这个新的Capability,UWP APP能够在运行时向用户请求Admin权限 ...
- 迁移桌面程序到MS Store(2)——Desktop App Converter
迁移传统桌面程序到MS Store的另一种方式是使用Desktop App Converter工具.虽然本篇标题包含了Desktop App Converter(以下简称DAC),实际上我是来劝你别用 ...
- 迁移桌面程序到MS Store(3)——开机自启动
迁移桌面程序的时候,有可能你会遇到这么个需求——开机自启动.Windows传统桌面程序的传统陋习.不论什么奇葩软件都想要开机自启动,默认就给你打开,一开机哐哐哐什么雷,什么企鹅都蹦出来,也不管你用不用 ...
随机推荐
- java练习---11
package cn.lyhh; class Person{ private String name; private int age; static String city = "A城&q ...
- springMVC保存数据到mysql数据库中文乱码问题解决方法
1.web.xml中添加过滤器 <filter> <filter-name>CharacterEncodingFilter</filter-name> <fi ...
- spring-Scheduler
作者:纯洁的微笑出处:http://www.ityouknow.com/ 版权所有,欢迎保留原文链接进行转载:) 在我们的项目开发过程中,经常需要定时任务来帮助我们来做一些内容,springboot默 ...
- git基础学习
1.git是什么 内容寻址文件系统,分布式版本控制系统 2.git作用 开发过程中的版本控制 3.git基础命令 克隆git仓库---clone:git clone 仓库url 选分支---check ...
- 在ABP中灵活使用AutoMapper
demo地址:ABP.WindowsService 该文章是系列文章 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业 的其中一篇. AutoMapper简介 Auto ...
- HashMap常见面试题整理
花了三天时间来仔细阅读hashMap的源码,期间补了下不少数据结构的知识,刷了不少相关的面试题并进行了整理 1.谈一下HashMap的特性? 1.HashMap存储键值对实现快速存取,允许为null. ...
- 【Java例题】2.6 三角形的面积
6. 用海伦公式计算三角形的面积. 设边长分别时a,b和c,s=(a+b+c)/2, 则三角形面积area=sqrt(s*(s-a)*(s-b)*(s-c)). package study; impo ...
- fiddler设置断点
1.有两种方法设置断点 before response:也就是发送请求之后,但是Fiddler代理中转之前,这时可以修改请求的数据 after response:也就是服务器响应之后,但是在Fiddl ...
- mysql注意事项
注意事项: 1.查询条件内需要使用时间的,不要使用数据库函数now(),都使用应用服务器传入: 2.所有id为mysql自增的,需要使用创建时间排序,都使用order by id desc;或者根据查 ...
- exe、dos、bat等静默运行,后台运行,不弹窗的解决办法
exe中 #pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" ) 1. WinExec(LPCS ...