在Win8上创建系统寄存器条目错误时出错

时间:2013-06-29 18:42:59

标签: delphi

在Windows 8上,以下引发错误。

CoInitializeEx(nil, COINIT_APARTMENTTHREADED or COINIT_SPEED_OVER_MEMORY); 
// or simply CoInitialize(nil); gives the same error

但是,如果应用程序以“管理员”身份运行,则表明它正常运行。

在Windows 7上,没有这样的问题。

应用程序是使用Delphi XE3(32位)构建的。

任何摆脱这个的解决方案?

First chance exception at $76AA4B32. 
Exception class EOleRegistrationError with message 
'Error creating system registry entry'. Process RPM.exe (4584)

1 个答案:

答案 0 :(得分:4)

调用CoInitialize时,不会引发您在问题中报告的错误。您报告的错误是Delphi异常,CoInitialize是Windows API调用。调用CoInitialize不会引发Delphi异常。

EOleRegistrationError引发了TComObjectFactory.UpdateRegistry。当您尝试注册(或取消注册)COM服务器时,将调用该方法。这需要管理员权限,因为它涉及对HKLM的修改。

因此,似乎对CoInitialize的调用根本不是问题。问题是您正在尝试修改HKLM下的COM注册表,这需要提升。当然,当你提升时,这种修改成功。

如果您的程序在Windows 7计算机上运行,​​则很可能是计算机已禁用UAC,或者进程正在升级。