2011-04-11 68 views
3

我有一組傳統的Delphi 6應用程序,它們是進程外COM服務器。在嘗試在Windows上以普通域用戶的身份運行這些程序時,在運行時(沒有任何命令行參數或交換機)嘗試更新HKEY_CURRENT_CLASSES塊時會看到它們。這是由於香港中華人民共和國蜂巢的許可使然。看來,運行Delphi 6 COM服務器的行爲會導致它嘗試向系統註冊表註冊其嵌入式COM類型。如何停止在啓動時重新註冊COM的Delphi 6 COM服務器應用程序

我不希望這種行爲正常。我們會在安裝期間和管理帳戶期間執行此操作,以初始化COM註冊表,但不希望在非管理帳戶的正常運行條件下執行此操作。 (如果您使用sys內部進程監視器moniroy系統,則可以看到失敗的註冊表項訪問嘗試)。

是否有命令行開關我可以傳遞給Delphi 6 COM服務器來防止這種自動COM註冊邏輯?

回答

4

我不認爲你實際看到什麼,你以爲你是...

德爾福只嘗試,如果尚未安裝它們安裝COM服務器。我懷疑你看到的是你的應用程序檢查是否已經註冊。你看到失敗的原因是因爲在Delphi 6中,註冊表項已經以ALL_ACCESS權限打開(D6早於XP/Vista/Win7),我認爲這就是導致失敗的註冊表訪問嘗試的原因。

回答你的問題,但:沒有,沒有命令行開關來防止自動註冊邏輯。

+0

如果肯是正確的,那麼你可以安全地忽略這些失敗的讀取 – 2011-04-11 17:00:09

+1

Delphi 6確實嘗試在每次運行的可執行文件時默認註冊COM服務器(我剛剛檢查過Delphi 7的源代碼)。你必須修改ComServ單元在TComServer.Initialize方法中禁用它,正如Mikael Eriksson所說的那樣。至少從德爾福2007開始,這已經是固定的。 – 2011-04-12 09:28:43

4

它會一直嘗試從TComServer.Initialize註冊服務器,除非啓動參數是/UNREGSERVER這將刪除註冊表設置。如果啓動參數是/REGSERVER,那麼如果註冊失敗,您將會得到一個異常,否則它只會吞下該異常。在Delphi的後續版本中,已經刪除了自動註冊out-proc COM服務器。您必須在Delphi 6中刪除此行爲的唯一選項是修改TComServer.Inititalize以僅在FStartModesmRegServersmUnregServer時註冊服務器。

相關問題