如何阻止Delphi 6 COM服务器应用程序在启动时重新注册COM

时间:2011-04-11 15:53:50

标签: delphi com permissions delphi-6

我有一套遗留的Delphi 6应用程序,它们是进程外的COM服务器。在尝试以Windows上的普通域用户身份运行这些程序时,我在运行时(没有任何命令行参数或开关)尝试更新HKEY_CURRENT_CLASSES的块时看到它们。由于获得了HKCR蜂巢的许可,因此失败。似乎运行Delphi 6 COM服务器的行为导致它尝试使用系统注册表注册其嵌入的COM类型。

我不希望这种行为正常。我们会在安装和管理帐户期间执行此操作以初始化COM注册表,但不希望在非管理员帐户的正常运行条件下执行此操作。 (如果您使用sys internals进程监视器调度系统,则可以看到失败的注册表键访问尝试)。

是否有命令行开关我可以传递给Delphi 6 COM服务器以防止这种自动COM注册逻辑?

2 个答案:

答案 0 :(得分:4)

我认为你实际上并没有看到你的想法......

Delphi仅尝试安装COM服务器(如果尚未安装)。我怀疑你看到的是你的应用程序检查它是否已注册。您看到失败的原因是因为在Delphi 6中,注册表项将以ALL_ACCESS权限打开(D6在XP / Vista / Win7之前),我认为这是导致注册表访问失败的原因。

回答你的问题,但是:不,没有命令行开关来阻止自动注册逻辑。

答案 1 :(得分:4)

除非启动参数为/UNREGSERVER,否则它将始终尝试从TComServer.Initialize注册服务器,这将删除注册表设置。如果启动参数为/REGSERVER,则在注册失败时会出现异常,否则只会吞下异常。在后续版本的Delphi中删除了out-proc COM服务器的自动注册。在Delphi 6中删除此行为的唯一选择是修改TComServer.Inititalize以仅在FStartModesmRegServersmUnregServer时注册服务器。