遷移桌面程序的時候,有可能你會遇到這么個需求——開機自啟動。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