0

在 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)
4

1 回答 1

4

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

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

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

如果您的程序在您的 Windows 7 机器上运行,则很可能该机器禁用了 UAC,或者该进程正在运行提升。

于 2013-06-29T18:51:51.253 回答