我使用注册DLL的方式改变了菜单,但是在UnRegister这个DLL后,必须Kill掉Explorer.exe,再重新运行才能把那个DLL删除,似乎在UnRegister后DLL仍被Explorer.exe使用(此时dll的功能已经消失,说明UnRegister是成功的)。
我尝试在DllUnregisterServer()中加入
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST  ,NULL,NULL);
CoFreeUnusedLibraries( ); TCHAR str[] = _T("Policy");
int nRet = SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,0,(LPARAM)str,0x0008|SMTO_ABORTIFHUNG|SMTO_NORMAL,5000,0);

TCHAR str2[] = _T("intl");
nRet = SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,0,(LPARAM)str2,0x0008|SMTO_ABORTIFHUNG|SMTO_NORMAL,5000,0);
RefreshPolicy(TRUE);
但是好像都没用:(

解决方案 »

  1.   

    你专门做一个简单的工程来测试一下那个dll吧
      

  2.   

    功能很简单就是更改鼠标右键菜单
    注册DLL后explorer就打开并载入DLL可能给它加了个共享锁,在explorer关闭之前这个锁不会释放?
    强制关闭explorer后果就是任务栏的图标消失,已经打开的所有文件夹也会被关闭。
    但是我希望能有办法解除explorer对这个dll的共享,我尝试了问题中的代码,但是没有效果。希望寻求大家的帮助,谢谢