背景:
如果我安装旧的安装包(1998 年创建),服务启动没有任何问题。这个包是使用 InstallShield 创建的,项目代码不可用。它使用本地部署,所有依赖的 DLL 都在 bin 目录中。它使用自定义installservice.exe(此代码也不可用)将lp30.exe安装为 Windows 服务。
我在做什么:
我需要使用 VS 2010 在 win2k8 上创建一个可工作的可安装包。在 VC++ 上,我可以使用文件和文件夹结构创建 .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 在应用程序路径中可用,不需要注册表。我发现它们已加载。但是在使用 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 ) 来启动服务。但行为与旧包不同。在这种情况下,我可能会缺少哪些其他配置?