天天看點

在64位windows下使用instsrv.exe和srvany.exe建立windows服務

在32位的windows下,包括windows7,windows xp以及windows 2003,都可以使用instsrv.exe和srvany.exe來建立自定義的windows服務。比如,我們有一個bat檔案,用于将指定的程式作為服務進行啟動,使用一般的工具都不可以進行此類工作,而使用由windows 2003的資源工具包windows toolkit中所帶的instsrv就可以。

詳細的用法這裡就不再具體叙述,簡單一點就是使用instsrv将相應的srvany注冊成服務,然後在系統資料庫中增加相應的Application和AppDirectory參數,用于srvany啟動我們所相應的服務。如下列代碼所示://将相應程式生成成服務

1

2

3

4

5

6

7

8

9

<code>set s32=%windir%\system32</code>

<code>%s32%\instsrv.exe %service_name% %s32%\srvany.exe</code>

<code> </code> 

<code>//在系統資料庫中更新相應的參數</code>

<code>echo Windows Registry Editor Version 5.00&gt; %reg_file%</code>

<code>echo &gt;&gt; %reg_file%</code>

<code>echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\%service_name%\Parameters] &gt;&gt; %reg_file%</code>

<code>echo "Application"="%prog_path%\\%prog_name%" &gt;&gt; %reg_file%//程式位址</code>

<code>echo "AppDirectory"="%prog_path%" &gt;&gt; %reg_file%//程式目錄</code>

以上的代碼在所有的32位系統之上都可以正常的運作,包括windows 2000。然而,在64位的windows下,以上的代碼卻失效了。會報一個以下錯誤:

<code>Unable to find the file at the given path</code>

在仔細檢查了參數之後,确定這是由于系統原因所引起的。

最終的原因在于,我們所使用的instsrv和srvany是32位的,而windows現在沒有相對應的64位相對應工具釋出。而程式本身是沒有問題的,問題在于我們将instsrv和Srvany放到windows/system32正面,而在64位系統中,這裡應該存放64位的程式,是以最終的解決問題很簡單。我們隻需要将這兩個程式再copy至32位程式應該放置的地方,比如windows/sysWow64目錄,這樣就可以了。原先的相應步驟以及程式根本就不需要作任何改動。instsrv會自動地找到原先應該放在system32下的程式,而這個程式現在被放置在了SysWow64目錄下。

簡單一點的解決方法就是,将instsrv和srvany程式在windows/sysWow64目錄下再copy一份,相當于在system32和sysWow64下都有程式,這樣問題即解決。更底層的原因,也許隻有微軟能解釋了,簡而言之,在64位系統下,32位程式是看不到放置在system32下面的程式的,而它應該通路的system32目錄被系統映射到了sysWow64目錄下了,在運作時系統會自動地将相應的sysWow64目錄映射為程式所認為的system32。

本文轉自左正部落格園部落格,原文連結:http://www.cnblogs.com/soundcode/p/4027859.html,如需轉載請自行聯系原作者

繼續閱讀