Eigil Jensen
Eigil Jensen

Reputation: 1

Moving system file across drives results in fAnyOperationsAborted is TRUE, when using Shell32DLL SHFileOperation/SHFILEOPSTRUCT

When using the Shell32DLL SHFileOperation for file operations, I came across an issue related to moving system file(s) across drives (eg. c:\ to d:).

When moving, the user will be prompted by a system dialog asking "Are you sure you want to move this system file? [Yes, Skip, Cancel]"

Here is the core essence of my move operation:

SHFILEOPSTRUCT struc = new SHFILEOPSTRUCT();
struc.pFrom = fromPtr;
struc.pTo = toPtr;
struc.wFunc = FO_MOVE;
struc.fFlags = 0; // no relevant flags for this
struc.hwnd = 0;
struc.lpszProgressTitle = string.Empty;
struc.fAnyOperationsAborted = false; // initialized to FALSE

int res = SHFileOperation(ref struc);

The operation returns 0x0 i.e. success, but the returned fAnyOperationsAborted is TRUE, even though the user accepted to move the system file. I would expect the operation to return fAnyOperationsAborted=FALSE in that case.

The problem is that I am not able to distinguish between the user accepting, skipping or cancelling the operation, as fAnyOperationsAborted is TRUE in all three cases.

How to solve this issue?

MSDN on SHFileOperation function: https://msdn.microsoft.com/en-us/library/windows/desktop/bb762164(v=vs.85).aspx

Upvotes: 0

Views: 217

Answers (1)

Anders
Anders

Reputation: 101764

Do the FOF_NOCONFIRMATION and/or FOF_NO_UI flags help?

If not you can use IFileOperation instead (Vista+). If you add a sink then IFileOperationProgressSink::PostMoveItem will tell you the HRESULT of each move operation.

Upvotes: 0

Related Questions