如何从C#调用SHChangeNotify,无错误14007

Séb*_*mer 2 c# pinvoke shell32

我正在编写可以更新文件的代码(多么罕见且令人兴奋!).当文件更新后,我需要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)
Run Code Online (Sandbox Code Playgroud)

Fullname是已更新文件的路径.我收到以下错误:

Error 14007 calling SHChangeNotify : The requested lookup key was not found in any active activation context
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

仅供参考:

[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
Run Code Online (Sandbox Code Playgroud)

Ray*_*hen 6

该文档SHChangeNotify没有提到Win32"上一个错误"代码设置失败.返回的任何值GetLastError都是无意义的.