當前位置: 妍妍網 > 碼農

WPF效果第二百四十四篇之軟體開機自啟

2024-05-18碼農

今天測試給反饋說:"你的程式加入開機自啟動,他就是死活不啟動 ";既然有問題咱們就一點點定位問題白;先來看看系統日誌 :

沒明白哪裏的問題 ;回想起咱的程式是必須管理員許可權執行;然而系統又是普通使用者;想到使用系統內建的任務計劃,發現結果好使:

1、那就直接程式碼實作吧,參考開源:

https://github.com/dahall/taskscheduler

2、建立任務計劃的方法:

private void Run(){ string path = ViewModel.ExePath; string taskName = "DataCollect"; using(TaskService ts = new TaskService()) {// 檢查任務是否已存在var task = ts.GetTask(taskName);if(task == null) {// 建立一個新的任務定義 TaskDefinition td = ts.NewTask(); td.RegistrationInfo.Description = "啟動裝置采集服務";// 建立一個觸發器,設定為在系統啟動後觸發 BootTrigger bt = new BootTrigger {// 設定延遲30秒啟動 Delay = TimeSpan.FromSeconds(30) }; td.Triggers.Add(bt);// 這裏是啟動咱們的軟體 td.Actions.Add(new ExecAction(path, null, null));// 設定任務使用最高許可權執行 td.Principal.RunLevel = TaskRunLevel.Highest;try {// 註冊任務到根資料夾 ts.RootFolder.RegisterTaskDefinition(taskName, td); ViewModel.OperType = OperationTypeEnum.Success; timer.Stop(); timer.Start(); }catch(Exception ex) { ViewModel.OperType = OperationTypeEnum.Fail; } }else { Console.WriteLine("Task already exists."); } }}

3、讀取登錄檔的方式獲取軟體的安裝目錄:

staticstringGetInstallPath(string softwareName){string baseKeyPath = @"SOFTWARE\WOW6432Node\company";// 嘗試開啟 'company' 鍵using(RegistryKey baseKey = Registry.LocalMachine.OpenSubKey(baseKeyPath)) {if(baseKey != null) {// 檢查是否存在 "裝置采集程式" 子鍵using(RegistryKey subKey = baseKey.OpenSubKey(softwareName)) {if(subKey != null) {//安裝路徑儲存在名為 "Path" 的鍵中string pathValue = subKey.GetValue("Path") asstring;return pathValue; } } } }returnnull;}

4、安裝目錄有了,那就直接建立任務計劃:

5、看看成功後的任務計劃結果:

編程不息、Bug不止、無Bug、無生活 ; bug 的冷靜、編碼的激情、完成後的喜悅、挖坑的激動 、填坑的興奮;這也許就是屌絲程式設計師的樂趣吧; 今天就到這裏吧;希望自己有動力一步一步堅持下去;生命不息,程式碼不止;大家抽空可以看看今天分享的效果,有好的意見和想法,可以在留言板隨意留言;我看到後會第一時間回復大家,多謝大家的一直默默的關註和支持! 如果覺得不錯,那就伸出您的小手點個贊並關註一下,多謝您的支持!