摘 要:軟件開機(jī)自動(dòng)運(yùn)行,為用戶操作使用頻率高的軟件提供了便利,它是基于操作系統(tǒng)的系統(tǒng)“啟動(dòng)項(xiàng)”實(shí)現(xiàn)。分析系統(tǒng)啟動(dòng)項(xiàng)的設(shè)置方法,在應(yīng)用程序開發(fā)中,可以通過“寫入注冊(cè)表”和“寫入系統(tǒng)‘啟動(dòng)’文件夾”來組織程序、編寫代碼。
關(guān)鍵詞:應(yīng)用程序;軟件;開機(jī)自動(dòng)運(yùn)行;操作系統(tǒng);系統(tǒng)啟動(dòng)項(xiàng)
中圖分類號(hào):TP316.7
應(yīng)用程序是指為完成某項(xiàng)或某幾項(xiàng)特定任務(wù)而被開發(fā)運(yùn)行于操作系統(tǒng)之上的計(jì)算機(jī)程序。軟件是指程序及與其相關(guān)文檔或其他從屬物的集合。軟件開機(jī)自動(dòng)運(yùn)行,也可稱為程序開機(jī)自動(dòng)加載。要實(shí)現(xiàn)軟件開機(jī)自動(dòng)運(yùn)行,就要在應(yīng)用程序開發(fā)過程中編寫實(shí)現(xiàn)相應(yīng)功能的代碼?;谶\(yùn)行方式的不同,應(yīng)用程序又分為WEB應(yīng)用程序和WINDOWS應(yīng)用程序。WEB應(yīng)用程序是基于B/S(瀏覽器/服務(wù)器)模式,通過WEB訪問的應(yīng)用程序,不需要安裝到本地操作系統(tǒng)中。WINDOWS應(yīng)用程序是基于C/S(客戶端/服務(wù)器)模式,又稱為窗口程序或者桌面程序,是需要將生成的軟件安裝到本地操作系統(tǒng)中,每次使用時(shí)單獨(dú)運(yùn)行才可以在本地操作的程序。這里所講的軟件開機(jī)自動(dòng)運(yùn)行就是指WINDOWS應(yīng)用程序生成的軟件。要實(shí)現(xiàn)軟件開機(jī)自動(dòng)運(yùn)行,我們首先應(yīng)該了解操作系統(tǒng)下,已經(jīng)成功安裝的軟件自動(dòng)運(yùn)行的實(shí)現(xiàn)方式,然后在此基礎(chǔ)上,組織程序,編寫代碼,從而在應(yīng)用程序中實(shí)現(xiàn)功能。下面就從這兩步來展開介紹。
1 了解操作系統(tǒng)下,軟件開機(jī)自動(dòng)運(yùn)行的設(shè)置
在操作系統(tǒng)下,要讓軟件開機(jī)自動(dòng)運(yùn)行一般采用三種方式:(1)使用操作系統(tǒng)的“啟動(dòng)”文件夾;(2)程序采用Windows服務(wù)的形式;(3)修改注冊(cè)表。
下面就對(duì)這三種方式的具體實(shí)現(xiàn)做一下簡(jiǎn)單介紹:(1)使用操作系統(tǒng)的“啟動(dòng)”文件夾:“啟動(dòng)”文件夾中包含著系統(tǒng)中的啟動(dòng)項(xiàng)目,啟動(dòng)項(xiàng)目就是系統(tǒng)開機(jī)運(yùn)行時(shí),會(huì)在前臺(tái)或后臺(tái)運(yùn)行的程序。這些啟動(dòng)項(xiàng)目在應(yīng)用中是指軟件的運(yùn)行快捷方式。將軟件的運(yùn)行快捷方式放到系統(tǒng)的啟動(dòng)項(xiàng)文件夾(C:\Users\計(jì)算機(jī)用戶名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)中就可以實(shí)現(xiàn)程序開機(jī)自動(dòng)加載;(2)采用Windows服務(wù)的形式:Windows服務(wù)應(yīng)用程序是一種需要長(zhǎng)期運(yùn)行的應(yīng)用程序,它對(duì)于服務(wù)器環(huán)境特別適合。它沒有用戶界面,并且也不會(huì)產(chǎn)生任何可視輸出。任何用戶消息都會(huì)被寫進(jìn)Windows事件日志。計(jì)算機(jī)啟動(dòng)時(shí),服務(wù)會(huì)自動(dòng)開始運(yùn)行。它們不要用戶一定登錄才運(yùn)行,它們能在包括這個(gè)系統(tǒng)內(nèi)的任何用戶環(huán)境下運(yùn)行。通過服務(wù)控制管理器,Windows服務(wù)是可控的,可以終止、暫停及當(dāng)需要時(shí)啟動(dòng)。這種方法是將程序在操作系統(tǒng)的后臺(tái)運(yùn)行,不涉及到軟件的頁面,跟本文提到的自動(dòng)運(yùn)行有區(qū)別,確切地說是啟動(dòng)了一項(xiàng)后臺(tái)服務(wù),所以這種方法無法實(shí)現(xiàn)軟件開機(jī)自動(dòng)運(yùn)行、打開軟件界面的操作;(3)修改注冊(cè)表:控制開機(jī)運(yùn)行的程序在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]這個(gè)位置,所以可以在run這一項(xiàng)下面手動(dòng)地添加新的字符串值,然后把這個(gè)字符串的數(shù)值數(shù)據(jù)寫成本軟件的具體的安裝路徑,這個(gè)路徑中應(yīng)包括.exe可執(zhí)行程序,設(shè)置成功后軟件就可以實(shí)現(xiàn)開機(jī)自動(dòng)運(yùn)行了。
2 分析方法,在應(yīng)用程序下實(shí)現(xiàn)
在了解了操作系統(tǒng)下軟件開機(jī)自動(dòng)運(yùn)行的設(shè)置方法后,應(yīng)用程序就可以基于這些方法來組織程序,編寫代碼。下面就來介紹這兩種方法在應(yīng)用程序中的實(shí)現(xiàn)。
首先了解一下.NET技術(shù)與C#腳本語言,.NET是Microsoft XML Web services平臺(tái)。XML Web services允許應(yīng)用程序通過Internet進(jìn)行通訊和共享數(shù)據(jù),而不管所采用的是哪種操作系統(tǒng)、設(shè)備或編程語言。從技術(shù)的角度,一個(gè).NET應(yīng)用是一個(gè)運(yùn)行于.NET Framework之上的應(yīng)用程序。C#是微軟公司發(fā)布的一種面向?qū)ο蟮?、運(yùn)行于.NET Framework之上的高級(jí)程序設(shè)計(jì)語言。
文中介紹的應(yīng)用程序開發(fā)技術(shù)是.NET技術(shù),腳本語言采用的是C#語言。
在應(yīng)用程序開發(fā)中一般需要通過控件的事件來觸發(fā)其事件過程,在事件過程中添加腳本來實(shí)現(xiàn)功能。在實(shí)際的操作界面中一般選擇使用按鈕(Button)控件或者單選按鈕(RadioButton)控件來實(shí)現(xiàn)。在這里選擇使用按鈕(Button)控件來實(shí)現(xiàn)。單擊“開機(jī)運(yùn)行”按鈕后,執(zhí)行按鈕單擊事件的事件過程,完成對(duì)操作系統(tǒng)中相應(yīng)設(shè)置—寫入注冊(cè)表或者加入系統(tǒng)啟動(dòng)項(xiàng)。下面依次介紹兩種方法的具體實(shí)現(xiàn)。說明:文中使用到的按鈕(Button)控件的ID分別為btn_run(開機(jī)運(yùn)行)和btn_forbit(禁止運(yùn)行)。
這兩種方法都需要知道軟件安裝后.exe可執(zhí)行文件的詳細(xì)路徑,因此首先設(shè)計(jì)一個(gè)通用函數(shù)以在兩種方法中使用。函數(shù)是用來獲取安裝軟件保存路徑字符串的,是通過應(yīng)用程序名稱到注冊(cè)表中去獲取該子鍵的鍵值,該鍵值即是軟件的安裝路徑。
2.1 寫入注冊(cè)表的實(shí)現(xiàn)方法。通過單擊按鈕(Button)控件(btn_run)激發(fā)單擊事件,執(zhí)行“寫入注冊(cè)表”的事件過程代碼。整個(gè)過程分兩步:首先獲取安裝后軟件的詳細(xì)路徑(包括.exe可執(zhí)行文件),然后將該路徑字符串作為鍵值寫入注冊(cè)表中的子鍵中。
2.2 使用操作系統(tǒng)“啟動(dòng)”文件夾的實(shí)現(xiàn)方法。實(shí)現(xiàn)該方法,主要分兩步完成:首先應(yīng)該確定該程序的啟動(dòng)快捷方式是否已經(jīng)創(chuàng)建,如果沒有創(chuàng)建,則先創(chuàng)建軟件的啟動(dòng)快捷運(yùn)行方式,因?yàn)橹挥锌旖葸\(yùn)行方式才可以在非安裝目錄下啟動(dòng)應(yīng)用程序;然后將創(chuàng)建的快捷方式復(fù)制到“啟動(dòng)”文件夾下。整個(gè)實(shí)現(xiàn)過程需要通過以下3個(gè)步驟。
第1步:建立獲取軟件安裝路徑函數(shù),函數(shù)代碼見上面“獲取軟件安裝路徑代碼”;
第2步:建立向指定文件夾中添加啟動(dòng)快捷方式的函數(shù)在獲取了軟件的安裝路徑之后,就可以在此基礎(chǔ)上向系統(tǒng)“啟動(dòng)”文件夾中添加啟動(dòng)快捷方式。創(chuàng)建該函數(shù)的腳本如下:(注意:在創(chuàng)建時(shí)要使用到微軟用來創(chuàng)建快捷方式的類庫IWshRuntimeLibrary,要使用該類庫,應(yīng)該添加對(duì)該類庫的引用,引用的方法是在項(xiàng)目的資源管理器下的“引用”文件夾上單擊鼠標(biāo)右鍵選擇“添加引用”,然后選擇COM選項(xiàng)卡并選擇Windows Script Host Object Model,點(diǎn)擊確定后就添加IWshRuntimeLibrary類庫,完成上述操作后就可以在程序中通過using IWshRuntimeLibrary加入對(duì)該命名空間的引用。)
private void createlinktool(string startpath,string appname,string exepath)//創(chuàng)建啟動(dòng)快捷方式函數(shù),startpath為系統(tǒng)啟動(dòng)項(xiàng)文件夾路徑;appname為應(yīng)用程序名稱;exepath為可執(zhí)行程序存儲(chǔ)路徑;
{
WshShell shell = new WshShell();//實(shí)例化WshShell對(duì)象
IWshShortcut shortcut=(IWshShortcut)shell.CreateShortcut(startpath+\"\\\"+appname+\".lnk\");//通過該對(duì)象的CreateShortcut方法來創(chuàng)建IWshShortcut接口的實(shí)例對(duì)象
shortcut.TargetPath = exepath;
shortcut.Arguments=\"\";//參數(shù)
shortcut.Description=\"快捷方式\";
shortcut.WorkingDirectory=exepath.Substring(0, exepath.LastIndexOf('\\'));//可執(zhí)行程序所在文件夾;
shortcut.IconLocation=exepath+\",0\";//圖標(biāo)
shortcut.Hotkey=\"CTRL+SHIFT+Z\";//熱鍵
shortcut.WindowStyle=1;
shortcut.Save();
}
第3步:在“開機(jī)運(yùn)行”按鈕控件的單擊事件的事件過程中依次調(diào)用上面兩個(gè)函數(shù),事件過程代碼如下:
private void btn_run_Click(object sender, System.EventArgs e) //點(diǎn)擊開機(jī)運(yùn)行按鈕
{
string mypath=\"\";
string startup=System.Environment.GetFolderPath((System.Environment.SpecialFolder)(7));//調(diào)用獲取系統(tǒng)“啟動(dòng)”文件夾路徑;其中System.Environment.GetFolderPath()為獲取系統(tǒng)特殊文件夾路徑函數(shù),7代表枚舉常數(shù),即代表系統(tǒng)“啟動(dòng)”文件夾
bool f=TryGetSoftwarePath(string softName, out string mypath) ;//調(diào)用獲取可執(zhí)行程序路徑函數(shù)
if(f==true)
{
createlinktool(startup,\"應(yīng)用程序名稱(打包軟件時(shí)設(shè)定)\",mypath);//調(diào)用創(chuàng)建啟動(dòng)快捷方式函數(shù);
}
}
通過以上三步就可以實(shí)現(xiàn)“開機(jī)運(yùn)行”操作,“禁用運(yùn)行”操作仍然是將系統(tǒng)“啟動(dòng)”文件夾中的快捷方式刪除掉。按鈕控件(ID:btn_forbit)的單擊事件的事件過程代碼如下:
private void btn_forbit_Click(object sender, System.EventArgs e)
{
string filepath=System.Environment.GetFolderPath((System.Environment.SpecialFolder)(7))+應(yīng)用程序名(打包軟件時(shí)設(shè)定).lnk;//獲取系統(tǒng)“啟動(dòng)”文件夾下的快捷方式;
if(File.Exists(filepah)
{
//如果存在則刪除
File.Delete(filepah);
}
}
至此使用系統(tǒng)“啟動(dòng)”文件夾的方法也已經(jīng)實(shí)現(xiàn)。
分析以上兩種方法,實(shí)際都是用到操作系統(tǒng)的“系統(tǒng)啟動(dòng)項(xiàng)”,通過向“注冊(cè)表”和“啟動(dòng)”文件夾寫入的方式來實(shí)現(xiàn)。在理解了操作系統(tǒng)下的設(shè)置方法后,在應(yīng)用程序中的實(shí)現(xiàn)過程并不復(fù)雜。兩種方法不存在優(yōu)劣,在實(shí)際應(yīng)用中可以選擇任何一種使用。軟件開發(fā)不是簡(jiǎn)單的書寫代碼,它綜合操作系統(tǒng)、網(wǎng)絡(luò)、數(shù)據(jù)庫等多項(xiàng)計(jì)算機(jī)相關(guān)知識(shí),所以在系統(tǒng)分析過程中要充分利用這些知識(shí)來組織程序邏輯,從而設(shè)計(jì)出簡(jiǎn)潔、完善、合理的應(yīng)用程序。
參考文獻(xiàn):
[1]肖柏昀.Android應(yīng)用程序中多線程應(yīng)用的方法研究[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2014(07):71-72.
作者簡(jiǎn)介:常志東(1980.07-),男,山東棲霞人,講師,本科,研究方向:軟件設(shè)計(jì)、網(wǎng)站開發(fā);趙立平(1980.05-),女,山東青州人,講師,學(xué)士學(xué)位。
作者單位:威海海洋職業(yè)學(xué)院 信息工程系,山東棲霞 265300;山東師范大學(xué)歷山學(xué)院,山東青州 262500