4

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

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

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

4

2 回答 2

4

我不认为你真的看到你认为你是什么......

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

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

于 2011-04-11T16:43:01.313 回答
4

它将始终尝试从 TComServer.Initialize 注册服务器,除非启动参数/UNREGSERVER将删除注册表设置。如果启动参数是/REGSERVER,如果注册失败,你会得到一个异常,否则它只会吞下这个异常。在更高版本的 Delphi 中,已删除了 out-proc COM 服务器的自动注册。您必须在 Delphi 6 中删除此行为的唯一选项是修改 TComServer.Initialize 以仅在FStartModeissmRegServer或时注册服务器smUnregServer

于 2011-04-11T18:01:12.477 回答