迁移桌面程序到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),实际上我是来劝你别用 ...
随机推荐
- c++11 时间相关操作练习
博客和书籍资料 来自该地址 https://www.cnblogs.com/qicosmos/category/490693.html 自行编写相应代码进行学习 // TimeTest.cpp: 定义 ...
- xcode如何运行下载的demo工程
1. 首先你需要改Bundle Identifier,修改成别人没注册过的. 2. 选中 “Automatically manage signing” 3. 在Team里面添加自己的个人帐号了.
- ubuntu安装rubyOnRails
https://gorails.com/setup/ubuntu/16.04#ruby-rbenv 文章很详细
- vue-cli引入jquery方法
方法一: 一,在package.json里加入, dependencies:{ ”jquery“:”^2.3.4“ } 二,在webpack.base.conf.js里加入 const webpack ...
- 【转】Centos 7 修改主机名hostname
在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(pretty).“静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始 ...
- 字符串算法hash
思路:给字符串做一个映射,两个元素相同,则他们的hash值必定相同. 注意:hash表必须是unsigned int类型,保证每个映射都是正数. 例题: Description 给出两个字符串W和T, ...
- linux学习--查看操作系统版本及cpu及内存信息
查看版本当前操作系统内核信息 uname -a 查看当前操作系统版本信息 cat /proc/version 查看物理cpu个数: cat /proc/cpuinfo| grep "phy ...
- mysql only_full_group_by报错的问题(转)
原文:https://www.cnblogs.com/jim2016/p/6322703.html 在mysql 工具 搜索或者插入数据时报下面错误: ERROR 1055 (42000): Expr ...
- php输出语句
看不懂? 抄一遍代码吧. echo 和 print 在 PHP 中有两个基本的输出方式: echo 和 print echo 和 print 区别: echo - 可以输出一个或多个字符串 print ...
- 乌龙之MySQL slave IO status:connecting
搭建了一个主从,状态一直如下: 检查错误日志报错如下: review搭建过程,语法并没有问题. 检查用户及网络,也没有问题: so?what is the cause ? 等等....貌似上面搭建用的 ...