我正在编写一个软件删除程序,并且想要卸载一个上下文菜单驱动程序。在尝试取消注册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,文件资源管理器仍然不会放弃它。