i write a snippet code that deletes a specified directory in SHFileOperation method.
The SHFileOperation class from a pinvoke.net
the flowing is my test code:
var interop = new InteropSHFileOperation();
interop.wFunc = InteropSHFileOperation.FO_Func.FO_DELETE;
interop.pFrom = path;
interop.fFlags.FOF_SILENT = true;
interop.fFlags.FOF_NOERRORUI = true;
interop.fFlags.FOF_NOCONFIRMATION = true;
return interop.Execute();
the above code can worked in my computer(win7,32-bit,.net 4.0),
but when running above code to my other computer(win 2008,64-bit,.net 4.0),i get the flowing error(from windows event viewer):
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
at Shopbots.IO.InteropSHFileOperation.SHFileOperation(SHFILEOPSTRUCT ByRef)
at Shopbots.IO.InteropSHFileOperation.SHFileOperation(SHFILEOPSTRUCT ByRef)
at Shopbots.IO.InteropSHFileOperation.Execute()
and from windows exceton dialog
event name : APPCRASH
Fault Module Name: shell32.dll
Fault Module Version: 6.0.6002.18646
Fault Module Timestamp: 4fd23d65
Exception Code: c0000005
[update 2]
according "Don't declare a value for the Pack size. If you omit it, the correct value is used when marshaling and a single SHFILEOPSTRUCT can be used for both 32-bit and 64-bit operation." from a other article:http://www.pinvoke.net/default.aspx/Structures/SHFILEOPSTRUCT.html:
change a SHFILEOPSTRUCT declare that work 32-bit and 64-bit windows operator system(because the InteropSHFileOperation class from pinvoke site that declare a SHFILEOPSTRUCT structure for 32-bit operator system)
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
struct SHFILEOPSTRUCT
{
....
}