首先简单介绍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运行的更多相关文章

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

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

  2. 迁移桌面程序到MS Store(1)——通过Visual Studio创建Packaging工程

    之前跑去做了一年多的iOS开发,被XCode恶心得不行.做人呢,最重要的是开心.所以我就炒了公司鱿鱼,挪了个窝回头去做Windows开发了.        UWP什么的很久没有正儿八经写了,国内的需求 ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. 迁移桌面程序到MS Store(3)——开机自启动

    迁移桌面程序的时候,有可能你会遇到这么个需求——开机自启动.Windows传统桌面程序的传统陋习.不论什么奇葩软件都想要开机自启动,默认就给你打开,一开机哐哐哐什么雷,什么企鹅都蹦出来,也不管你用不用 ...

随机推荐

  1. golang "[]uint8" to string

    关于Uinit8和Byte: The Go Programming Language Specification Numeric types uint8 the set of all unsigned ...

  2. apache httpd多后缀解析漏洞复现

    apache httpd多后缀解析漏洞复现 一.漏洞描述 Apache Httpd支持一个文件拥有多个后缀,不同的后缀执行不同的命令,也就是说当我们上传的文件中只要后缀名含有php,该文件就可以被解析 ...

  3. handlerAdapter与方法调用(参数的解析)

    前提:当找到handler以后,那么就要让handler发挥作用,这个时候handlerAdapter就派上用场了 这里面比较复杂就是requestMappingHandlerAdapter了,其他的 ...

  4. PLSQL连接数据库报监听程序找不到符合协议堆

    服务器上某个数据库出现' ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程'错误,要解决该问题首先查看一下数据库现有的进程数,是否已经达到参数processes的大小   根 ...

  5. java连接oracle数据库jdbc

    driver = oracle.jdbc.driver.OracleDriver url = jdbc:oracle:thin:@localhost:1521:orcl

  6. idea中写servlet时报错--关于405错误

    将super方法注释掉 原因:super是调用了此类继承父类doget和dopost方法的, 如果此类中没有这个方法,就会报错The specified HTTP method is not allo ...

  7. 【iOS】Your account already has a valid ios

    打包内测的时候遇到了这个问题,如图所示: 官网解决办法: If the certificate already exists in Member Center, a “Your account alr ...

  8. Struts完成用户新增操作

    点击新增客户出现该页面并完成前后台交互 代码逻辑分析: jsp 页面部分代码 <TABLE id=table_1 style="DISPLAY: none" cellSpac ...

  9. django+uwsgi+nginx 部署生产环境

    一.Uwsgi安装 python3 -m pip install uwsgi cp /usr/local/python3/bin/uwsgi /usr/bin/ 测试 在django项目主目录下cre ...

  10. 利用反射,更改string对象的value数组以达到改变string值。

    package test; import java.lang.reflect.Field; import lombok.Value; public class Test1{ public static ...