取消注册和卸载Context菜单驱动程序

时间:2018-03-01 13:48:29

标签: c++ windows

我正在编写一个软件删除程序,并且想要卸载一个上下文菜单驱动程序。在尝试取消注册dll时,在Windows文件资源管理器打开时取消注册驱动程序失败。首先关闭文件资源管理器然后运行该程序并不总是有效。

以下是我现在使用的取消注册代码:

HINSTANCE hLib = LoadLibraryW(szDllPath);

if (hLib == NULL)
{
    DWORD dwErrorCode = GetLastError();
    szError.Format(_T("\nWindows could not load library %s due to %s"),szDllName,getLastWinError(dwErrorCode));
    return false;            
}

typedef HRESULT (CALLBACK *HCRET)(void);
HCRET lpfnDllRegisterServer;

// Find the entry point
lpfnDllRegisterServer = (HCRET)GetProcAddress(hLib, "DllUnregisterServer");



if (lpfnDllRegisterServer == NULL)
{
    szError = NEWLINE;
    szError = ERR_PROCEDURE_ADDRESS;
    return false;            
}

// Call the function by function pointer..
if (FAILED((*lpfnDllRegisterServer)()))            
{   
    szError.Format(_T("\nWindows could not unregister context menu driver %s!"),szDllName);
    return false;            
}

FreeLibrary(hLib);

最好的方法是什么?似乎即使通过删除相关的注册表项来注销dll,文件资源管理器仍然不会放弃它。

0 个答案:

没有答案