2013-01-04 25 views
1

背景:
如果我安裝了舊的安裝包(創建於1998年)在服務啓動沒有任何problem.This包是使用InstallShield創建項目的代碼是不可用的。它使用本地部署,並且所有依賴的DLL都位於bin目錄中。 它使用自定義installservice.exe(代碼爲此也不可用)安裝lp30.exe作爲Windows服務。Windows服務啓動問題與舊的dll

我在做什麼:
我需要創建使用VS 2010。在VC++ win2k8工作安裝的軟件包,我可以創建的.msi使用文件&文件夾結構,並從舊標識的註冊表項&安裝文件安裝。

問題:
在安裝項目,定製完成後調用installservice.exe安裝lp30.exe的服務。但服務啓動與下面的錯誤結尾:

"Error: 1053 The service did not respond to the start or control request in a timely fashion" 

分析:
installservice.exe無法啓動lp30.exe的服務。在對PS2FaxW.dll函數的庫調用中失敗。這是1998年的第三方DLL,其源代碼不可用。

DLL在應用程序路徑中可用並且不需要註冊表。我發現他們是loaded.But而與dependencywalker分析,我看到下面的錯誤:

GetProcAddress(0x75790000 [KERNEL32.DLL], "IsTNT") called from "PS2FAXW.DLL" at address 0x10003F81 and returned NULL. Error: The specified procedure could not be found (127). 

LoadLibraryA("\LincPag2.dll") returned NULL. Error: The specified module could not be found (126). 

最後又用

Exited "LP30.EXE" (process 0x1DE8) with code 126 (0x7E).  

問題退出:
我使用的是相同的「installservice.exe 「和用於啓動服務的相同應用程序(lp30.exe)。但是這種行爲並不像舊套餐那樣。在這種情況下,我可能會缺少哪些其他配置?

+0

由於登錄憑據或權限,我有時會得到服務無法啓動的問題。您是否曾嘗試以本地管理員帳戶運行該服務以確保它的權限不相關? – WraithNath

回答

1

默認情況下,服務的當前目錄爲Current directory for Windows service is not what you expect中的system32文件夾。另請參閱此StackOverflow問題What directory does a Windows Service run in?

本質上,您的服務試圖從system32加載DLL,而不是應用程序目錄。您可以嘗試將LincPag2.dll放入system32中,看看是否暫時解決了問題。我不認爲把DLL放在system32是最好的長期解決方案,但它可能是一個有用的調試步驟。

0

嘗試用命令行開關這樣調用服務:

LP30.EXE /install

不LP30.EXE產生任何輸出到控制檯呢?

嘗試使用「SC」命令:

sc create LP30 binPath= "\"C:\Program Files\Foo\LP30.exe""

如果一切都失敗,運行Process Monitor下原(1998)的程序,看看到底它在做什麼。