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

如何在启动时停止Delphi 6 COM服务器应用程序向COM重新注册,delphi,com,permissions,delphi-6,Delphi,Com,Permissions,Delphi 6,我有一套传统的Delphi6应用程序,它们是进程外COM服务器。在试图以普通域用户的身份在Windows上运行这些程序时,我在运行(没有任何命令行参数或开关)试图更新HKEY_当前_类块时看到了它们。由于未获得HKCR蜂巢的许可,此操作失败。运行Delphi 6 COM服务器的行为似乎会导致它尝试向系统注册表注册其嵌入式COM类型 我不希望这种行为正常。我们会在install under和Administrative account期间执行一次,以初始化COM注册表,但不希望在非Administ

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

我不希望这种行为正常。我们会在install under和Administrative account期间执行一次,以初始化COM注册表,但不希望在非Administrative account的正常运行条件下执行此操作。(如果使用sys INTERNATES process monitor监视系统,则可以看到失败的注册表项访问尝试)


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

我认为您实际上没有看到您认为自己是什么

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


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

它将始终尝试从TComServer注册服务器。初始化,除非启动参数为
/UNREGSERVER
,这将删除注册表设置。如果启动参数为
/REGSERVER
,则如果注册失败,您将获得一个异常,否则它将吞下该异常。在更高版本的Delphi中,已删除out proc COM服务器的自动注册。在Delphi 6中,您必须删除此行为的唯一选项是修改TComServer.Inititalize,以便在
FStartMode
smRegServer
smUnregServer
时仅注册服务器。如果ken是对的,则您可以安全地忽略这些失败的读取。Delphi 6在每次运行时都默认尝试注册COM服务器在TComServer.Initialize方法中,您必须修改ComServ单元以禁用它,正如Mikael Eriksson所说的。至少自Delphi 2007年以来,这一问题已经得到解决。