今天測試給反饋說:"你的程式加入開機自啟動,他就是死活不啟動 ";既然有問題咱們就一點點定位問題白;先來看看系統日誌 :
沒明白哪裏的問題
;回想起咱的程式是必須管理員許可權執行;然而系統又是普通使用者;想到使用系統內建的任務計劃,發現結果好使:
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 的冷靜、編碼的激情、完成後的喜悅、挖坑的激動 、填坑的興奮;這也許就是屌絲程式設計師的樂趣吧; 今天就到這裏吧;希望自己有動力一步一步堅持下去;生命不息,程式碼不止;大家抽空可以看看今天分享的效果,有好的意見和想法,可以在留言板隨意留言;我看到後會第一時間回復大家,多謝大家的一直默默的關註和支持! 如果覺得不錯,那就伸出您的小手點個贊並關註一下,多謝您的支持!