Delphi 在第一次程序启动时注册COM对象

Delphi 在第一次程序启动时注册COM对象,delphi,com,Delphi,Com,我有一个带有自动化对象的Delphi应用程序。 在程序开始时,我想在注册表中自动注册COM对象(而不是使用/regserver开关) 这个程序的旧版本是用Delphi7编写的,我想我记得这个版本是在程序启动后注册的。但是现在它是用D2009编译的,现在它没有注册自己。也许有人知道这件事 多谢各位 您可以使用ComServer.UpdateRegistry(True)注册com对象和ComServer.UpdateRegistry(False)取消注册 ComServer可在ComServ.pas

我有一个带有自动化对象的Delphi应用程序。 在程序开始时,我想在注册表中自动注册COM对象(而不是使用/regserver开关)

这个程序的旧版本是用Delphi7编写的,我想我记得这个版本是在程序启动后注册的。但是现在它是用D2009编译的,现在它没有注册自己。也许有人知道这件事


多谢各位

您可以使用
ComServer.UpdateRegistry(True)
注册com对象和
ComServer.UpdateRegistry(False)取消注册

ComServer
可在ComServ.pas中找到


这可能会失败,因为您运行的机器带有UAC,并且您没有写入
HKLM
的权限。使用
/regserver
开关无法找到令人满意的解决方案,因为它总是尝试在那里写入


您可以切换到无注册表COM,不过最好在安装过程中进行注册。这是期望您这样做的时候,因为那时您知道您将拥有足够的权利。

同意-出于安全原因,注册确实应该作为应用程序安装过程的一部分完成。您好,感谢您的回复。我已经想到它可能与UAC有关——但如果这是原因,当我以管理员身份运行它时(是否?)@gonzales右键单击.exe并选择“以管理员身份运行”时,程序应该自动注册。此解决方案适用于内部软件,但对于专业软件而言,将被视为低于标准。您好,大卫,是的,我尝试了此解决方案,但注册表信息未写入。“这就是为什么我想知道UAC应该引起这个问题的原因。”冈萨雷斯没有更多的细节很难说。如果您正在提升,则您将有权使用HKLM。使用调试DCU并运行RAD Studio很容易进行调试(因此,它启动的进程被提升。这里有一个快速猜测。你的机器是64位的,而你需要查看注册表的64位部分,而实际上你需要查看32位区域。很好,谢谢。但我仍然想知道为什么程序在使用D7编译时会自动注册,而在使用D2009编译时不会自动注册…功能是remo由于David Heffernan提到的原因,Embarcadero对其进行了ved。当作为普通用户或启用UAC运行时,不允许修改保存com注册的注册表部分。在Delphi XE中,应该有一种方法仅为当前用户注册com对象,该方法可能能够为启用UAC的非管理员运行.Auto register com server已在Delphi 2007中删除。以前的版本始终更新注册表,无论是否有必要。更改是为了更好。非常感谢您的输入。您从何处获得此信息?;)@gonzales我在ComServ.pas中查找过:)。在
过程TComServer.Initialize中进行更改