迁移桌面程序到MS Store(3)——开机自启动
迁移桌面程序的时候,有可能你会遇到这么个需求——开机自启动。Windows传统桌面程序的传统陋习。不论什么奇葩软件都想要开机自启动,默认就给你打开,一开机哐哐哐什么雷,什么企鹅都蹦出来,也不管你用不用。
但是上班呢,老板是给钱的,只要有需求,节操什么的不重要。今天我们就来看怎么弄开机自启动……(大雾)
当然我们这里介绍的,是可以让用户随时禁用的。还有就是MS Store在审核时,会让你写需要自启动的理由。原生的UWP APP还会有一个要求授权的对话框。
首先我们还是和上一篇一样,建好一个空的WPF(WinForm也行)工程和一个Packaging工程。假设我们这里叫AutoLaunchApp和AutoLaunchPackaging。记得在Packaging工程的Applications下添加对AutoLaunchApp的引用。
接下来右键Package.appxmanifest文件,选择open with…再选择XML(Text)Editor打开。

在这个XML文件中,在最上方的Package添加命名空间
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"

之后就可以通过desktop来添加desktop:Extension和desktop:StartupTask节点。这里的属性值介绍见下表:
Category: windows.startupTask
Executable: 转制的exe文件名,我们这里是AutoLaunchApp.exe
EntryPoint: Windows.FullTrustApplication
TaskId: 给StartupTask起个名字,方便在C#代码里关闭和开启Task
Enabled: 默认是否开启自启动
DisplayName: 显示在Windows任务管理器里的名字

最简单的自启动任务到此就完成了。通过Visual Studio部署安装后(不要按F5运行),就可以在任务管理器中找到AutoLaunchApp。此时会发现Status的状态是Disabled。此时的StartupTask实际是没有激活的。在这种情况下重新启动电脑,并不会开机自启动AutoLaunchApp。

此时如果我们运行一次AutoLaunchApp,则会将Status置为Enabled,从而启用开机自启动的功能。
那有的同学就较真了,我原来的桌面程序,不用运行一次,安装完毕直接重启电脑就可以实现开机自启动。你这个不符合要求。说实话这个问题是挺头疼的,但也不是没有办法解决。
我这里提供一个很简单的方法,特别适合于不走商店流程(也就是sideload,常见于通过企业IT部署),而是通过独立的msi之类的安装包安装的情况。
首先我么需要通过Packaging工程的Package.appxmanifest文件,来给AutoLaunchApp增加一个Protocol。这里我们在tab页中选择Declarations,然后在Available Declarations中选择Protocol,点击Add。在Name一栏随便填个缩写alpp(Auto Launch Packaging Protocol)。

完成后重新部署,然后我们就可以通过这个缩写来进行URI启动APP的操作了。如果此时我们在CMD中输入“start alpp:”,回车后会发现AutoLaunchApp被启动。
接下来我们需要通过安装包的脚本向注册表插入这个cmd的script。
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce]

这样的话,我们会有一个一次性的CMD script在Windows启动时被执行。然后通过CMD script来启动AutoLaunchApp,激活StartupTask。
本篇我们讨论了如何开机自启动转制的desktop APP,下一篇会讨论如何在APP的设置里开启/禁用自启动的选项,谢谢将鼠标滚动到这里的同学。
GitHub:
https://github.com/manupstairs/DesktopBridgeSamples.git
迁移桌面程序到MS Store(3)——开机自启动的更多相关文章
- 迁移桌面程序到MS Store(5)——.NET Standard
接下来的几篇,我想讨论下迁移桌面程序到MS Store,可以采用的比较常见.通用性比较强的实施步骤和分层架构. 通常商业项目一般都是不断的迭代,不太可能突然停止更新现有的桌面版本,然后花很长时间从头来 ...
- 迁移桌面程序到MS Store(1)——通过Visual Studio创建Packaging工程
之前跑去做了一年多的iOS开发,被XCode恶心得不行.做人呢,最重要的是开心.所以我就炒了公司鱿鱼,挪了个窝回头去做Windows开发了. UWP什么的很久没有正儿八经写了,国内的需求 ...
- 迁移桌面程序到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(10)——在Windows S Mode运行
首先简单介绍Windows 10 S Mode,Windows在该模式下,只能跑MS Store里的软件,不能通过其他方式安装.好处是安全有保障,杜绝一切国产流氓软件.就像iOS一样,APP进商店都需 ...
- 迁移桌面程序到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(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),实际上我是来劝你别用 ...
随机推荐
- Exception 异常 输出的各个方法的区别
try{ System.out.println(1/0); }catch(Exception e){ //System.out.println(e+""); //对象+字符串 = ...
- spring学习九 spring aop详解
本文来自于:https://www.cnblogs.com/jingzhishen/p/4980551.html AOP(Aspect-Oriented Programming,面向方面编程),可以说 ...
- O365 Manager Plus详解
- python之Bottle框架
一.简单的Bottle框架 1)bottle框架简介 安装 pip install bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架. 此框架只由一个 .py 文件,除 ...
- 建库,建表,添加数据 SQL命令
create database ssm default character set utf8; use ssm; create table flower( id int(10) primary key ...
- 在python中while
一.While循环 1.while循环格式 while 条件 : while循环体 当条件为Ture时,执行循环体,直到条件是假,停止循环. count = 1 # count 计数 一般用于计数 w ...
- linux 安装 ORACLE JDK 8
1.卸载默认的OPENJDK 查看 open jdk 的安装 rpm -qa | grep java 卸载 openjdk rpm -e --nodeps java-1.7.0-openjdk-1.7 ...
- (2)The secrets of learning a new language
https://www.ted.com/talks/lydia_machova_the_secrets_of_learning_a_new_language/transcript 00:13I lov ...
- 第31章:MongoDB-索引--复合索引
①复合索引 对多个字段创建索引被称为复合索引或者组合索引 ②创建组合索引 创建组合索引(以后台模式创建) db.user.ensureIndex({"username": 1, & ...
- 一个简单的MySQL多实例环境搭建
安装mysql 初始化两个数据库目录 mysql_install_db --datadir=/usr/local/var/mysql1 --user=mysql mysql_install_db -- ...