![](/img/trans.png)
[英]How do I discover if my delphi application currently has a modal window?
[英]How do I discover what my service's dependencies are?
我有一個Windows服務使用:
在某些機器(具有舊硬件和Windows XP)上,它在啟動時會掛起。
檢查Windows事件日志,我發現了事件的ID:7022,7036。
機器啟動后,我手動啟動服務,一切正常!
我認為問題與缺少服務依賴性有關。
我的問題是:
如何找到服務的必要依賴關系?
有什么實用工具可以告訴我嗎?
UPDATE
我已經有日志了...
我的服務可以通過一些我稱為插件的“子服務”插入。 該插件以“插件管理器”開始,該應用程序(exe)加載dll以確保服務內存隔離。
該插件管理器具有一個Handle(AllocateHWnd),可以從服務接收消息(通過sendmessange),例如:
插件管理器的引導程序是:
服務啟動程序,啟動插件管理器的代碼是:
start := now;
while callbackHandle = 0 do
begin
if PeekMessage(msg, 0, 0, 0, PM_REMOVE) then
begin
// need to process a message on WndProc to
// assign the 'callbackHandle' variable with the
// handle sent from the plugin manager
TranslateMessage(msg);
DispatchMessage(msg);
end;
// timeout! Plugin manager doesn't sent it's handle!!
if secondsBetween(now, start) > 60 then
break;
end;
if callbackHandle = 0 then
raise Exception.Create('Cannot receive the callback handle from plugin manager');
在日志上,發生以上異常:無法從插件管理器接收回調句柄
似乎服務句柄未收到pluginmanager句柄,以啟動IPC(進程間通信)。
奇怪的是,如果我在計算機啟動后手動啟動該服務,它將正常啟動。
消息隊列處理時間不是問題。 問題是:硬件速度慢
我將ServicePipeTimeout從30秒(默認)增加到2分鍾,一切恢復正常。
現在,我將嘗試在服務OnStart事件中使用RequestAdditionalTime 。 唯一的問題是我正在使用Delphi 7。
最簡單的啟動方法是在服務中實現日志記錄機制。 只需將您正在做的所有事情寫到TextFile
。 然后,您可以輕松地找到服務掛在哪里。
您要使用DBExpress
連接什么? 像SQL Server這樣的數據庫引擎? 如果是這樣,則可能是在RDBMS之前啟動了您的服務...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.