我们有一台安装了 Cebos MQ1(版本 7 和版本 GRI)产品的 Windows 2003 服务器,这些产品已经运行多年。安装后Microsoft 2010 C++ 可再发行组件包由于需要进行其他开发,MQ1 GRI 服务现在无法启动。
事件日志显示,可再发行组件还安装了两个额外的更新(.NET4 和 2010 C++ Redistributable SP2)。我们发现 MQ1 服务无法正常启动后,立即删除了这三个已安装的包。但是,服务仍然无法启动;弹出的对话框显示“服务已启动然后停止。”。
当我们尝试启动服务时,事件日志没有显示任何内容;IE:没有与此服务相关的错误、崩溃、故障或其他信息。直接执行 MQ1Serv.exe 会指定问题“缺少命令行操作,必须指定安装、卸载和公司缩写。'sc query MQ1Service(GRI)
显示 Win32ExitCode 的干净退出0x0
。尝试重新安装客户端或服务器软件时出现错误“无法在动态链接库 KERNEL32.dll 中找到程序输入点 ReInitializeCriticalSection'注册图书馆'阶段。
此时,进一步的研究表明所需函数位于 URL.dll 中,并验证库未损坏。sfc /scannow
在服务器上运行替换了一些 DLL;包括 URL.DLL 到 2005 版。这实际上破坏了需要重新安装的其他应用程序(其中之一是 IE 7)。重新安装和更新后,url.dll 版本为 7.0.5730.13 (2009),Kernel32.dll 版本为 5.2.3790.4480 (2009)。MQ1 GRI 服务仍然无法启动,并指定与之前的“服务启动后停止”相同的错误。在 Kernel32.dll 和 Url.dll 上运行反汇编程序未显示名为的函数ReinitializeCriticalSection
。
尝试重新安装 MQ1 客户端和服务器以及再次启动服务,再次失败。但是,将 MQ1 客户端安装 exe 上的兼容模式设置为“Windows 95”实际上可以安装该程序。在 MQ1 服务器服务上设置兼容模式并不能使其启动。
我已经研究这个问题近一周了,除了建议扫描和替换 url.dll 之外,没有得出任何成功的结论。此服务在 2010 C++ 安装之前可以运行,无需任何附加参数或设置。删除 C++ 安装和所有服务包/更新后,它默默安装,仍然无法解决 MQ1 GRI 服务无法启动的问题。
问: 尝试初始化服务时,是否有其他人遇到过此问题或类似问题?我忽略了什么,或者我还可以尝试什么来启动此服务?
答案1
尽管重新安装抛出了与“ReInitializeCriticalSection”相关的错误,但服务无法启动的错误与 Kernel32.dll 无关。MQ1ServerSettings.ini(rootpath 属性)中的错误配置被覆盖。将位置更正为此路径并重新安装 MQ1Service 可使其按预期成功启动。