我有一个服务应用程序,它使用's对象连接到 MSSQL,TADOConnection
并为客户端应用程序提供一些数据。此服务应用程序可能安装在运行 MSSQL 的同一台机器上,并且可能在服务之前启动。因此,我无法连接到 ADO 。我试图在 的情况下连接到 ADO ,但由于它在单独的线程中运行,我得到“尚未调用 CoInitialize”。然后,我尝试将其与我的主线程同步,如下所示:Cromis.IPC
TIPCServer
MSSQL
OnServiceStart
OnExecuteRequest
TIPCServer
TThread.Synchronize(nil, ConnectDB);
但它没有用。我的应用程序立即停止响应。
接下来,我修改了OnExecuteRequest
事件以将调用它的线程作为参数传递,我尝试了这个:
AThread.Synchronize(AThread, ConnectDB);
但没有变化。当我打开 Use debug DCUs 时,我发现我的应用程序在这一行停止响应:
function WaitForSyncWaitObj(P: Pointer; Timeout: Cardinal): Integer;
begin
Result := WaitForSingleObject(THandle(P), Timeout); // <-- I'm stuck here...
end;
我完全迷路了。有任何想法吗?
PS:我没有提供我的代码来防止问题混乱。如果您需要它的任何部分,请告诉我。
PS 2:在此之前,我尝试在我的服务应用程序中使用 Timer 等待一段时间,然后再连接到 MSSQL。似乎 MSSQL 很快就启动了,甚至在加载网络驱动程序之前(我安装了 McAfee VSE 8.7,它替换了网络驱动程序)。我的服务连接到 MSSQL,但是,当加载网络驱动程序时,连接断开。如果有办法告诉Windows(XP及更高版本)在加载网络驱动程序后启动服务,我的问题就解决了。任何提示都非常感谢。