繁体   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