gpt4 book ai didi

c++ - 如何自己注册 "quartz.dll"?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:05:47 31 4
gpt4 key购买 nike

注册一个COM,主要是regsvr32.exe,但是我需要自己写代码注册quartz.dll。所以我写了下面的代码:

typedef HRESULT(WINAPI *FREG)();

BOOL Register()
{
CoInitialize(NULL);
HMODULE hMod = ::LoadLibrary(L"C:/windows/sysWow64/quartz.dll");
if (!hMod)
return FALSE;

HRESULT hResult = ::OleInitialize(NULL);
if (hResult != S_OK)
{
::FreeLibrary(hMod);
return FALSE;
}

FREG lpfunc = (FREG)::GetProcAddress(hMod, "DllRegisterServer");
if (!lpfunc)
{
::FreeLibrary(hMod);
::OleUninitialize();
return FALSE;
}

hResult = lpfunc();
::OleUninitialize();
::FreeLibrary(hMod);

return (hResult == S_OK);
}

但是 lpfunc() 得到了 E_ACCESSDENIED General access denied 错误。 我启用了UAC requireAdministrator,但没有任何改变。

有趣的是,上面的代码在控制台程序中运行良好,在MFC中仍然存在权限问题,我找了很多资料,但问题都没有解决。

最佳答案

首先,您通常不想注册quartz.dll。在极少数情况下,它确实可以修复某些问题(尤其是与卸载不正确制作的编解码器包相关的问题)。幸运的是,重新注册也没有坏处。

除了 OleInitialize 不是真正必需的之外,代码几乎是正确的。非特权应用程序无法在 HKLM 下写入,因此 E_ACCESSDENIED 失败。如果您将 UAC 级别降低到不提示用户确认 requireAdministrator 应用程序的执行,您仍然必须在最近的操作系统中“以管理员身份运行”,否则注册表仍然对您的应用程序和 DLL 保持只读状态您要求进行注册。

归根结底,它仍然是关于安全性和 UAC 的。

关于c++ - 如何自己注册 "quartz.dll"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50566075/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com