趙 睿
(常德技師學(xué)院 湖南 常德 415000)
學(xué)校新建了兩個機(jī)房,由于使用了64位的win7系統(tǒng),在多媒體教學(xué)軟件的選用中,只有紅蜘蛛教學(xué)軟件能滿足要求,所以機(jī)房中安裝了紅蜘蛛系統(tǒng)來進(jìn)行教學(xué)演示。
最近上課,發(fā)現(xiàn)許多調(diào)皮的學(xué)生都悄悄把紅蜘蛛客戶端退出了,他們是怎么做到的呢?經(jīng)過觀察,我發(fā)現(xiàn)學(xué)生們采取結(jié)束紅蜘蛛進(jìn)程,并對程序進(jìn)行刪除或改名,也就是說,安裝文件夾下沒有了紅蜘蛛程序,這樣,學(xué)生就成功的脫離了教師機(jī)的控制。
怎么辦呢?問題原因是安裝文件夾下的紅蜘蛛文件不存在了,由此我想,如果我來編寫一個程序,用來檢測該文件是否存在,如果不存在了,自動將備份的紅蜘蛛程序復(fù)制過去,這樣不就可以起到避免教學(xué)軟件的退出了么?
說做就做,我啟動VB,新建一個標(biāo)準(zhǔn)exe文件,并將form控件的visible屬性設(shè)置為disable,因?yàn)槲也幌M@個程序運(yùn)行后被學(xué)生發(fā)現(xiàn),該屬性設(shè)置后窗體不會被顯示出來。然后我又在窗體上建立了一個timer控件,將interval屬性設(shè)置為5000,意思為過5秒檢測一次。雙擊timer控件,輸入如下代碼:
On Error Resume Next
If Dir("c:3000softRed spiderRedagent.exe") ="" Then
FileCopy "c:windowsak.dat", "c:3000softRed spiderRedagent.exe"
End If
以上代碼的意思是檢測"c:3000softRed spiderRedagent.exe"文件是否存在,如果不存在了,則復(fù)制"c:windowsak.dat"文件過去(該文件是我做的Redagent的備份文件),并改名為Redagent.exe。這段代碼每隔5秒鐘執(zhí)行一次,確保紅蜘蛛教學(xué)軟件的安全。
簡單的代碼寫好后,我生成exe文件,然后復(fù)制到機(jī)房的每臺電腦上,并通過修改注冊表,將其設(shè)置為自啟動文件,果然,在后面的教學(xué)中,起到了立竿見影的效果,許多學(xué)生發(fā)現(xiàn)無法刪除掉紅蜘蛛了。
可是,好景不長,過了幾個星期,機(jī)房又出現(xiàn)了紅蜘蛛被退出的現(xiàn)象,經(jīng)過調(diào)查,發(fā)現(xiàn)學(xué)生已經(jīng)找到了我做的程序,然后——也把它結(jié)束進(jìn)程刪掉了!怎么辦?我想到了Windows的服務(wù)系統(tǒng)。
大家都知道,Windows有許多許多的服務(wù),服務(wù)其實(shí)就是一個程序,服務(wù)也能隨著計(jì)算機(jī)的啟動而執(zhí)行,而且在執(zhí)行后并不能在進(jìn)程中發(fā)現(xiàn)。我如果把自己的這個程序做成一個服務(wù),那豈不是就能避免被學(xué)生發(fā)現(xiàn)了?于是,我開始對我的源程序進(jìn)行改造。
Vb下做服務(wù)比較麻煩,需要一個控件——ntsvc.ocx,我首先下載這個控件,把它復(fù)制到c:windows下,并通過regsvr32 ntsvc.ocx進(jìn)行注冊,然后打開我的源程序,選擇“工程”——“部件”,引用這個控件,引用成功后,在工具箱中出現(xiàn)了一個Ntservice的控件按鈕。
我把這個控件添加到form1中,然后在右側(cè)的屬性欄中設(shè)置如下參數(shù):
Displayname:sys service (顯示名,我起名的原則是不易被發(fā)現(xiàn),其實(shí)用任意的名字都可以的)
Servicename:service(服務(wù)名:起名的理由同上)Startmode:2(啟動模式:自動啟動)
其余的參數(shù)基本可以不變,然后我再在程序的Form_load事件中添加如下代碼:
On Error GoTo Err_Load
Dim strDisplayName As String
strDisplayName = NTService1.DisplayName
If Command = "-install" Then
NTService1.Interactive = True
If NTService1.Install Then
Call NTService1.SaveSetting("Parameters","TimerInterval", "1000")
MsgBox strDisplayName & "安裝成功 "
Else
MsgBox strDisplayName & " 安裝失敗"
End If
End
Else
If Command = "-uninstall" Then
If NTService1.Uninstall Then
MsgBox strDisplayName & "卸載成功"
Else
MsgBox strDisplayName & " 卸載失敗"
End If
End
Else
End If
End If
Timer1.Interval = CInt(NTService1.GetSetting("Parameters", "TimerInterval","2000"))
N T S e r v i c e1.C o n t r o l s A c c e p t e d=svcCtrlPauseContinue
NTService1.StartService
首先,生成一個可執(zhí)行程序,我將其起名為system.exe,然后復(fù)制到學(xué)生電腦的c:windowssystem32下面。然后進(jìn)入CMD,輸入如下命令:system–install然后回車,出現(xiàn)安裝成功的對話框提示。這個時候,打開控制面板的服務(wù),發(fā)現(xiàn)我的這個服務(wù)已經(jīng)被加入進(jìn)去,而且是設(shè)置為自啟動的。
那么,究竟可以了沒有呢?我重啟學(xué)生電腦,啟動完畢后,再次打開服務(wù),發(fā)現(xiàn)這個服務(wù)已經(jīng)啟動了,我嘗試著刪除了紅蜘蛛軟件,果然,不到5秒鐘,紅蜘蛛就被復(fù)制過來了,終于成功了!
新做的程序已經(jīng)在機(jī)房試用了一段時間了,最近均沒有發(fā)現(xiàn)紅蜘蛛被退出的事情了,此番和學(xué)生斗智斗勇的過程讓我也學(xué)到了不少知識,不過,除了在技術(shù)上約束學(xué)生以外,我們教師更多的還是要在教學(xué)上下功夫,以提高學(xué)生的學(xué)習(xí)積極性。
[1]羅朝盛.《Visual Basic 程序設(shè)計(jì)教程》人民郵電出版社,2005.
[2]管麗娜,白海波.《實(shí)用Visual Basic6 教程》[M].北京:清華大學(xué)出版社,2001.
[3]段興主編.《visual Basic數(shù)據(jù)庫實(shí)用程序設(shè)計(jì)100例》人民郵電出版社.