Order of Queue Commitment

When the SetupCommitFileQueue function commits the file queue, it processes the file operations in the following order: file deletion operations, then file renaming operations, and finally, file copying operations. The following outline illustrates the life cycle of a queue's commitment process.

 

  • start the delete subqueue
    • start a file delete operation <-- repeat for each
    • finish a file delete operation <-- queued file delete
  • finish the delete subqueue
  • start the rename subqueue
    • start a file rename operation <-- repeat for each
    • finish a file delete operation <-- queued file rename
  • finish the rename subqueue
  • start the copy subque
    • start a file copy operation <-- repeat for each
    • finish a file copy operation <-- queued file copy
    • finish the copy subqueue
  • finish the queue

 

At each step, or if an error occurs, the SetupCommitFileQueue function sends a notification to the callback routine. The callback routine can use the information sent by the queue to track the installation progress and, if necessary, interact with the user.

For example, if a file copy operation needed a source file that was not available at the current path, SetupCommitFileQueue would send a SPFILENOTIFY_NEEDMEDIA notification to the callback routine, along with information about the file and media required. The callback routine could use this information to generate a dialog box that prompts the user to insert the next disk by calling SetupPromptForDisk

A default queue callback routine, SetupDefaultQueueCallback, is included with the Setup API. This routine handles queue notifications and generates error dialog boxes and progress bars for the installation. You can use the default queue callback routine as it is, or write a filter callback routine to handle a subset of the notifications and pass the others on to the default queue callback routine.

If none of the functionality of the callback routine suits your needs, you can write a self-contained custom callback routine that does not call the default queue callback routine.

For more information about queue callback routines, see Default Queue Callback Routine, and Creating a Custom Queue Callback Routine.