C#?將程序添加開機啟動的三種方式
前言
最近在研究程序隨系統(tǒng)啟動,發(fā)現(xiàn)在 win7 上因為權(quán)限的問題,寫注冊表的時候總是會出現(xiàn)問題,寫不進去導致的不能自動啟動,隨后決定仔細的看一看這方面的問題。
查資料過程中主要發(fā)現(xiàn)有三種方式可以添加到啟動,分別是:
- 開始菜單啟動;
- 注冊表啟動項;
- Windows 計劃任務(wù)。
一、開始菜單啟動
在很久以前,剛開始捯飭電腦的時候,就知道的一個開機啟動的方法,那時候就是直接把程序的快捷方式創(chuàng)建并復制到“開始”菜單的“啟動”中,并且屢試不爽,當然那時候更多的時候是手動創(chuàng)建,拖動到啟動中的。用程序?qū)崿F(xiàn)也并不復雜。
總共分兩步:
- 找到“開始”菜單的“啟動”關(guān)聯(lián)的目錄;
- 創(chuàng)建快捷方式到這個目錄;
創(chuàng)建快捷方式代碼:
public static bool Create(string directory, string shortcutName, string targetPath,
string description = null, string iconLocation = null)
{
try
{
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
//添加引用 Com 中搜索 Windows Script Host Object Model
string shortcutPath = Path.Combine(directory, string.Format("{0}.lnk", shortcutName));
IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(shortcutPath);//創(chuàng)建快捷方式對象
shortcut.TargetPath = targetPath;//指定目標路徑
shortcut.WorkingDirectory = Path.GetDirectoryName(targetPath);//設(shè)置起始位置
shortcut.WindowStyle = 1;//設(shè)置運行方式,默認為常規(guī)窗口
shortcut.Description = description;//設(shè)置備注
shortcut.IconLocation = string.IsNullOrWhiteSpace(iconLocation) ? targetPath : iconLocation;//設(shè)置圖標路徑
shortcut.Save();//保存快捷方式
return true;
}
catch
{ }
return false;
}
注:在使用 WshShell 時,需要添加引用,從 Com 中搜索:Windows Script Host Object Model 添加即可。
開始菜單啟動文件夾的位置獲?。?/p>
// 獲取全局 開始 文件夾位置 Environment.GetFolderPath(Environment.SpecialFolder.CommonStartup); // 獲取當前登錄用戶的 開始 文件夾位置 Environment.GetFolderPath(Environment.SpecialFolder.Startup);
二、注冊表開機啟動項
這個相信是大部分同學使用的情況,簡單易懂隱蔽(只是感覺很隱蔽,但是 msconfig 立馬暴露),代碼很簡單,將啟動的項目名稱、文件位置添加到啟動項即可。
// 添加到 當前登陸用戶的 注冊表啟動項
RegistryKey RKey = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
RKey.SetValue("AppName", @"C:\AppName.exe");
// 添加到 所有用戶的 注冊表啟動項
RegistryKey RKey = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
RKey.SetValue("AppName", @"C:\AppName.exe");
這里需要注意的是,當你使用 regedit 查看注冊表啟動項時,會發(fā)現(xiàn)有的啟動項是雙引號引起來的:
AppName C:\AppName.exe
or
AppName “C:\AppName.exe”
如果你的路徑中,帶有空格,需要使用雙引號引起來,這樣能保證在啟動的時候不會出現(xiàn)問題,如下:
// @ 符號中的雙引號需要用兩次來轉(zhuǎn)義
RKey.SetValue("AppName", @"""C:\AppName.exe""");
三、Windows 計劃任務(wù)方式啟動
Windows 的計劃任務(wù)方式添加啟動也是可以實現(xiàn)自啟動的方式,但是個人感覺這種方式有點奇葩……
代碼:
//新建任務(wù)
TaskSchedulerClass scheduler = new TaskSchedulerClass();
//連接
scheduler.Connect(null, null, null, null);
//獲取創(chuàng)建任務(wù)的目錄
ITaskFolder folder = scheduler.GetFolder("\\");
//設(shè)置參數(shù)
ITaskDefinition task = scheduler.NewTask(0);
task.RegistrationInfo.Author = author;//創(chuàng)建者
task.RegistrationInfo.Description = desc;//描述
//設(shè)置觸發(fā)機制(此處是 登陸后)
task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON);
//設(shè)置動作(此處為運行exe程序)
IExecAction action = (IExecAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);
action.Path = file;//設(shè)置文件目錄
task.Settings.ExecutionTimeLimit = "PT0S"; //運行任務(wù)時間超時停止任務(wù)嗎? PTOS 不開啟超時
task.Settings.DisallowStartIfOnBatteries = false;//只有在交流電源下才執(zhí)行
task.Settings.RunOnlyIfIdle = false;//僅當計算機空閑下才執(zhí)行
IRegisteredTask regTask =
folder.RegisterTaskDefinition(name, task,//此處需要設(shè)置任務(wù)的名稱(name)
(int)_TASK_CREATION.TASK_CREATE, null, //user
null, // password
_TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN,
"");
IRunningTask runTask = regTask.Run(null);
注意:任務(wù)計劃需要添加引用,在 Com 中搜索 TaskScheduler,添加即可,并且要在“嵌入互操作類型”設(shè)置為false,使程序編譯時,能從互操作程序集中獲取 COM 類型的類型信息。
匯總代碼
以上就是添加到系統(tǒng)啟動的三種方法,源碼:源碼下載
到此這篇關(guān)于C# 將程序添加開機啟動的三種方式的文章就介紹到這了,更多相關(guān)C# 程序開機啟動內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#?CefSharp?根據(jù)輸入日期段自動選擇日期的操作代碼
這篇文章主要介紹了C#?CefSharp?根據(jù)輸入日期段自動選擇日期的操作代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01
C#獲取機器碼的方法詳解(機器名,CPU編號,硬盤編號,網(wǎng)卡mac等)
這篇文章主要介紹了C#獲取機器碼的方法,結(jié)合實例形式詳細分析了C#獲取硬件機器名、CPU編號、硬盤編號、網(wǎng)卡mac等信息的相關(guān)實現(xiàn)方法,需要的朋友可以參考下2016-07-07
WinForm實現(xiàn)同時讓兩個窗體有激活效果的特效實例
這篇文章主要介紹了WinForm實現(xiàn)同時讓兩個窗體有激活效果的特效實例,基于windows api實現(xiàn)一個窗體激活的時候給另外一個發(fā)消息的特效,在進行C#項目開發(fā)時有一定的實用價值,需要的朋友可以參考下2014-09-09
C#中System.Array.CopyTo() 和 System.Array.Clon()&nbs
System.Array.CopyTo()和System.Array.Clone()是用于數(shù)組復制的兩種不同方法,本文就來介紹C,#中System.Array.CopyTo() 和 System.Array.Clon() 的區(qū)別,具有一定的參考價值,感興趣的可以了解一下2024-04-04

