在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)
答案 0 :(得分:4)
调用CoInitialize
时,不会引发您在问题中报告的错误。您报告的错误是Delphi异常,CoInitialize
是Windows API调用。调用CoInitialize
不会引发Delphi异常。
EOleRegistrationError
引发了TComObjectFactory.UpdateRegistry
。当您尝试注册(或取消注册)COM服务器时,将调用该方法。这需要管理员权限,因为它涉及对HKLM
的修改。
因此,似乎对CoInitialize
的调用根本不是问题。问题是您正在尝试修改HKLM
下的COM注册表,这需要提升。当然,当你提升时,这种修改成功。
如果您的程序在Windows 7计算机上运行,则很可能是计算机已禁用UAC,或者进程正在升级。