迁移桌面程序的时候,有可能你会遇到这么个需求——开机自启动。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)——开机自启动的更多相关文章

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

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

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

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

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

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

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

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

  5. 迁移桌面程序到MS Store(10)——在Windows S Mode运行

    首先简单介绍Windows 10 S Mode,Windows在该模式下,只能跑MS Store里的软件,不能通过其他方式安装.好处是安全有保障,杜绝一切国产流氓软件.就像iOS一样,APP进商店都需 ...

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

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

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

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

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

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

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

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

随机推荐

  1. *args 和**kwargs 的溯源

    *args:arguments:表示参数,代表一个tuple**kwargs:表示关键字参数,代表一个dict 也就是keyword args.keyword就表示字典,也就是关键字.为什么叫关键字. ...

  2. netty1 快速入门

    Netty是一个高性能.异步事件驱动的网路通信框架 ,由于精力有限,本人并没有对其源 码做了特别细致的研究.如果下面的内容有错误或不严谨的地方,也请大家指正和谅解. Netty的线程模型是Reacto ...

  3. (xxx.55).toFixed(1) 无法正确进位处理

    参考:https://juejin.im/post/5a11a9fef265da43284073b4?utm_medium=fe&utm_source=weixinqun 根本原因在于2.55 ...

  4. firefox 之 event兼容写法

    event 在 IE 和 FF(Firefox) 中是不兼容的,IE 中可以直接使用 event 对象,而 FF 中则不可以,解决方法之一如下: var event = window.event || ...

  5. openssl RSA加密方法初识

    作为非对称加密算法,有两对密钥 一般用法 加密结果=RSA_EN(数据,公钥); 解密结果=RSA_DE(数据,私钥); RSA填充 (RSA_public_encrypt和RSA_private_d ...

  6. 兼容ie透明书写

    filter:alpha(opacity=0); opacity:0;filter:alpha(opacity=70); opacity:0.7;

  7. 2018.12.18 bzoj2242: [SDOI2011]计算器(数论)

    传送门 数论基础题. 对于第一种情况用快速幂,第二种用exgcdexgcdexgcd,第三种用bsgsbsgsbsgs 于是自己瞎yyyyyy了一个bsgsbsgsbsgs的板子(不知道是不是数据水了 ...

  8. (1)There's more to life than being happy

    https://www.ted.com/talks/emily_esfahani_smith_there_s_more_to_life_than_being_happy00:12 I used to ...

  9. java中的四种修饰符:private、protected、public和default的区别

      本类 本包 子类 包外 public 可以 可以 可以 可以 protected 可以 可以 可以 不可以 default 可以 可以 不可以 不可以 private 可以 不可以 不可以 不可以 ...

  10. base64编码理解

    原文地址:http://www.ruanyifeng.com/blog/2008/06/base64.html 所谓Base64,就是说选出64个字符----小写字母a-z.大写字母A-Z.数字0-9 ...