簡體   English   中英

如何阻止Delphi 6 COM服務器應用程序在啟動時重新注冊COM

[英]How to stop a Delphi 6 COM server application re-registering with COM at startup

我有一套遺留的Delphi 6應用程序,它們是進程外的COM服務器。 在嘗試以Windows上的普通域用戶身份運行這些程序時,我在運行時(沒有任何命令行參數或開關)嘗試更新HKEY_CURRENT_CLASSES的塊時看到它們。 由於獲得了HKCR蜂巢的許可,因此失敗。 似乎運行Delphi 6 COM服務器的行為導致它嘗試使用系統注冊表注冊其嵌入的COM類型。

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

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

我不認為你真的看到了你的想法......

Delphi僅嘗試安裝COM服務器(如果尚未安裝)。 我懷疑你看到的是你的應用程序檢查它是否已注冊。 您看到失敗的原因是因為在Delphi 6中,注冊表項將以ALL_ACCESS權限打開(D6在XP / Vista / Win7之前),我認為這是導致注冊表訪問失敗的原因。

但是,在回答您的問題時:不,沒有命令行開關來阻止自動注冊邏輯。

它將始終嘗試從TComServer.Initialize注冊服務器,除非啟動參數是/UNREGSERVER將刪除注冊表設置。 如果啟動參數是/REGSERVER ,如果注冊失敗,您將收到異常,否則它將只吞下異常。 在后續版本的Delphi中刪除了out-proc COM服務器的自動注冊。 在Delphi 6中刪除此行為的唯一選擇是修改TComServer.Inititalize以僅在FStartModesmRegServersmUnregServer時注冊服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM