轉摘:有一個EXE程序,可以作為托盤程序運行。我寫了注冊表:
\SoftWare\Microsoft\windows\CurrentVersion\Run,現(xiàn)在能夠在用戶登錄操作系統(tǒng)后自動運行。
我想讓它在登錄之前就能自動運行,希望通過注冊表達到這個目的,請問哪位知道方法?
查到下面的方法,覺得不太方便
引用自 jimmyge (Do Re Mi)
想讓一個程序在啟動系統(tǒng)的時候自動運行,你有什么好辦法?添加到啟動組?那如果別人刪除掉就不管用了。如果你使用了Windows NT/2000/XP,就可以試試把這個程序添加為一個服務,這樣只有擁有權限的人才可以更改服務,只要你設置好權限,就不用擔心會被別人刪除了。
要把應用程序添加為服務,你需要兩個小軟件:Instsrv.exe和Srvany.exe。Instsrv.exe可以給系統(tǒng)安裝和刪除服務,Srvany.exe可以讓程序以服務的方式運行。這兩個軟件都包含在Windows NT Resource Kit里,如果你沒有,也可以點擊這里下載。
把這兩個程序保存在一個方便的位置,例如C盤根目錄下。我們舉例來說明,把OE作為一個服務添加進Windows XP Professional操作系統(tǒng)中,并把這個服務命名為“Mail”。在運行中輸入“CMD”,回車,打開命令行窗口,在提示符后面直接輸入:“c:\instsrv.exe Mail c:\srvany.exe”然后回車,其中的“c:\instsrv.exe”和“c:\srvany.exe”表示這兩個程序保存的位置,而Mail則是你想添加的服務名稱。
運行Regedit打開注冊表編輯器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下,找到剛才添加的Mail,點擊右鍵,新建一個鍵,命名為“Parameters”,點擊新建的Parameters,并再次新建一個名稱為“Application”的子鍵,數(shù)據(jù)類型為“REG_SZ”,數(shù)值為希望作為服務運行的程序的所在位置,如果你的Windows系統(tǒng)安裝在C盤下,那么OE的程序位置就是C:\Program Files\Outlook Express\msimn.exe ,把這個路徑添入數(shù)值中。到現(xiàn)在,這個服務已經(jīng)成功的添加并且設置好了。如果你希望做的更加專業(yè),可以在Mail服務下建立一個名為Description的子鍵,數(shù)據(jù)類型同樣為REG_SZ,數(shù)值可以寫一些你對這個服務的描述,這個我們在后面可以看到。
接下來需要對服務做一些額外的設置,在運行中輸入“Services.msc”并回車,在列表中找到我們剛添加的Mail服務,雙擊打開,來做詳細的設置。在“General”選項卡上,我們需要設置這個服務的運行方式,在圖二中可以看見,作為一個服務,有“自動(Automatic)”,“手動(Manual)”和“禁止(Disabled)”三種啟動類型,按照需要,我們一般設置成自動就可以了。而在“Logon”選項卡下可以設置以什么身份運行這個服務,一般可以不用理會,按照默認的設置。“Recovery”選項卡下則是進行恢復設置的,你可以指定,在服務第一次,第二次和第三次出錯之后分別采取什么措施。“Dependencies”則顯示了服務之間的依存關系,可以讓你察看這個服務的運行依賴哪些其它服務,以及還有什么服務依賴于這個服務。這后面幾個對我們一般用戶沒有什么意義。經(jīng)過這些設置,你的服務已經(jīng)完全可以正常工作了。
對于不能普通方式下安裝為服務的程序,用srvany.exe來實現(xiàn)。
該工具添加的注冊表信息并不完全,還是需要手工添加 Parameters 和 Application,并且還要 srvany.exe,和修改 ImagePath 的數(shù)值才可,否則在啟動服務時顯示:1053 服務沒有及時響應啟動或控制請求。
在補充完全注冊表信息后,就正常了。
以下是一個例子
存為“文件名.reg”,然后用鼠標雙擊這個”文件名.reg”文件,選確定,就可添加到注冊表了。實際程序的參數(shù),你需要根據(jù)具體的程序來調(diào)整。
REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\srvany\Parameters]
“Application”=”c:\\usr\\local\\bin\\dmh_wish.exe”
“AppParameters”=”-f dmh84_server startup \”after 1 {mbx whenmsg startup_RPC mbx_RPC}\”"
“AppDirectory”=”c:\\usr\\local\\bin”
圖形界面的程序,如果做成服務后(并允許與桌面交互),注銷后就會被關閉,反之則彈不出圖形界面,很不爽。如果你不想讓別人看見,就不允許與桌面交互,那除了進程外什么都看不見。
將容易導致系統(tǒng)被入侵的服務“禁用”,然后將這些服務對應的注冊表鍵刪除,這樣就算對方連接到你的系統(tǒng)服務列表中來也不能修改服務的屬性,不能修改服務屬性就不能啟動服務。打開注冊表編輯器,依次找到“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices”項,其下的每個子鍵就是系統(tǒng)中對應的“服務”,如“Messenger”服務對應的子鍵是
“Messenger”,但有的服務這兩個名字不會相同,不過也很容易找到,
“DisplayName”的鍵值就是服務的顯示名稱。這里以刪除“Messenger”服務為例,其它服務方法相同,只是在注冊表中刪除的項不同,在刪除這個項之前要先將其導出備份,然后點選“Messenger”項,按鼠標右鍵選擇“刪除”(重命名也可以)命令。此時在服務列表中雙擊“Messenger”就會彈出如下圖所示的錯誤信息,當然對方連接到你的服務列表雙擊時也會出現(xiàn)這樣的提示,而不是出現(xiàn)屬性框。如果要恢復這個服務,只需將剛才備份的注冊表文件導入到注冊表中就可以了。
另一種添加為自啟動的方法:(Win2000/XP中適用)
在“開始→運行”中執(zhí)行“Gpedit.msc”。打開“組策略”,可看到“本地計算機策略”中有兩個選項:“計算機配置”與“用戶配置”,展開“用戶配置→管理模板→系統(tǒng)→登錄”,雙擊“在用戶登錄時運行這些程序”子項進行屬性設置,選定“設置”項中的“已啟用”項并單擊“顯示”按鈕彈出“顯示內(nèi)容”窗口,再單擊“添加”按鈕,在“添加項目”窗口內(nèi)的文本框中輸入要自啟動的程序的路徑,如圖所示,單擊“確定”按鈕就完成了。
重新啟動計算機,系統(tǒng)在登錄時就會自動啟動你添加的程序。用這種方式添加的自啟動程序在系統(tǒng)的“系統(tǒng)配置實用程序”里找不到,同樣在我們所熟知的注冊表項中也找不到。
通過這種方式添加的自啟動程序雖然被記錄在注冊表中,但是不在我們所熟知的注冊表的[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]項和[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]項內(nèi),而是在注冊表的[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run]項。
Run SRVINSTW.EXE
1. Put both files into the system32 system directory.
2. run SRVINSTW.EXE
3. Select Install as a service, Local Machine
4. Give your service any name you desire
5. When prompted for the path to the service, give the path to SERVANY.EXE in your system32 directory
6. Select Service is it’s own process
7. Set the login credentials. System account appears to work
Edit your registry
1. Run regedit.exe
2. Go to HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\ (the name you picked in step 4 above)
3. Add a key = “Parameters”
4. Add a string value = “Application”. Set this to the command to run your wiki. e.g. “c:\ruby\bin\ruby.exe c:\instiki-0.9.1\instiki.rb -p 2500” (or use rubyw.exe)
5. Add a string value = “AppDirectory”. Set this to the path to ruby.exe. e.g. “c:\ruby\bin\”
Restart your machine
1. check to see if it worked.
2. if it didn’t work, go to Control Panel\Administrative tools\services. Here you can find your service and change the settings.
用instsrv與srvany在windows 建立服務
instsrv.exe srvany.exe
這兩個文件是MS批量生產(chǎn)的,網(wǎng)上應該能爛下載。
首先將這兩個文件放到自定的路徑中。例如放在C:\根目錄下
在CMD對話框中輸入 c:\instsrv.exe servername c:\ srvany.exe 回車
其中servername是你所需要的服務名。
之后你需要進入注冊表進行相應的設置,在注冊表的:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\servername
中簡歷Parameters子項,然后在其中建立一個字符串Application,雙擊該字符串,輸入如下格式的語句:
C:\ABC\DEF\XXX.exe +Xms256M +Xmx256M -nodbcheck -minspan60 -retry1000
其中的256M與服務占用內(nèi)存大小有關,這就要看機器的配置了。
修改結束后推出,使用命令services.msc進入服務界面,找到你剛剛定制的服務,雙擊進入,之后選擇“登陸”,再選中“本地登陸”并確定。之后手動啟動服務即可。
C:\service\instsrv.exe adslSrv “C:\service\srvany.exe”
下面介紹使用SrvAny.exe將tracd封裝成windows服務,本人使用的是XP SP2,其他windows系統(tǒng)應該大同小異:
1.下載Windows 2003 Resource Kits,在微軟官方有下載。下載后安裝,默認安裝到C:\Program Files\Windows Resource Kits\Tools目錄,其實我們只需要該目錄下的SrvAny.exe和instsrv.exe文件即可,在此目錄下還有rktools.chm幫助文件,大家可以查看SrvAny.exe如何使用。
2.創(chuàng)建服務,語法如下:instsrv 服務名稱 srvany所在路徑\srvany.exe。假設我們的Windows 2003 Resource Kits都安裝在C:\Program Files\Windows Resource Kits\Tools目錄,待建立的服務名稱是TracSrv,那么我們的命令如下:
“C:\Program Files\Windows Resource Kits\Tools\instsrv” TracSrv “C:\Program Files\Windows Resource Kits\Tools\srvany.exe”
需要注意的是,srvany前的路徑不能省略,必須是絕對路徑。
現(xiàn)在我們已經(jīng)創(chuàng)建了一個名叫TracSrv的服務,下一步我們來配置這個服務,讓它封裝tracd命令。
3.在注冊表中配置TracSrv服務,運行“regedit”,進入注冊表。找到注冊表項“HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\TracSrv”,在TracSrv項里建立新的子項“Parameters”,再在新建的 Parameters項里新建字符串值,數(shù)值名稱設為“Application”,數(shù)值數(shù)據(jù)設為我們在第一篇說的啟動tracd的行命令,也就是
c:\python24\python c:\python24\scripts\tracd -p 8001 C:\SCM\Angel\Angel_Trac
(注意使用全路徑)。這樣,我們就配置好了TracSrv服務。
4.啟動TracSrv服務?,F(xiàn)在我們就可以在瀏覽器中訪問Trac網(wǎng)站,只要服務器啟動,不需要進入登陸Windows桌面,我們就可以訪問Trac站點了。
如何刪除這個服務呢?使用sc.exe即可,此命令在xp系統(tǒng)自帶。
1.停止TracSrv服務。
2.運行cmd,進入行命令窗口,輸入“sc delete TracSrv”,回車即可。
以上是在使用Tracd作為Web服務器時的做法,其他的Web服務器(比如Apache)本身就已經(jīng)作為服務運行,不需要進行此設置。
另外,以上講的封裝服務的方法是通用的,可以使用這種方法創(chuàng)建新的服務來封裝你的程序。