如何在c#中调用SHChangeNotify而不会出错14007
本文关键字:出错 14007 SHChangeNotify 调用 | 更新日期: 2023-09-27 18:13:43
我正在编写可以更新文件的代码(多么不寻常和令人兴奋!)当一个文件被更新时,我需要Windows资源管理器再次调用覆盖扩展名,这样我总是在文件上有正确的覆盖。我想我会用一些p/invoke技巧来做到这一点(看看TortoiseSVN是如何做到的),但我总是得到错误14007,也找不到原因。这是代码:
IntPtr ptr = Marshal.StringToHGlobalUni(FullName);
Shell.SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSH, ptr, IntPtr.Zero);
Win32Exception w = new Win32Exception(Marshal.GetLastWin32Error());
LOG.ErrorFormat("Error {0} calling SHChangeNotify : {1}", w.NativeErrorCode, w.Message);
Marshal.FreeHGlobal(ptr)
Fullname是被更新的文件的路径。我得到以下错误:
Error 14007 calling SHChangeNotify : The requested lookup key was not found in any active activation context
我哪里做错了?
仅供参考:
[DllImport("Shell32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern void SHChangeNotify(HChangeNotifyEventID wEventId, HChangeNotifyFlags uFlags, IntPtr dwItem1, IntPtr dwItem2);
SHCNE_UPDATEITEM = 0x00002000
SHCNF_PATH = SHCNF_PATHW = 0x0005
SHCNF_FLUSH = 0x1000
SHChangeNotify
的文档没有提到Win32"最后一次错误"代码在失败时设置。GetLastError
返回的任何值都是无意义的