Archive: Backup Utility written in NSIS Script


Backup Utility written in NSIS Script
Well, I spent a good two days (probably 20 hours, which is pretty gross considering it's sorta simple) on this and then the better part of a week testing and wanted to get some feedback on it from folks who know how spiffy NSIS really is.

Queue'eM - Backup / Synchronize / Archive

I had three goals when making this:
1) simple, config-file-driven utility to backup files from my flash drive to my computer
2) protect files in regards to deletion by not including file deletion as part of the utility
3) figure out some way to use the stupid archive file flag attribute

The project started off as a silent NSIS ''installer'' but I quickly realized I really wanted a progress bar. So, I just removed the silent attribute, tweaked some dialogs and changed all my Abort's into Quit's. NSIS did the rest of the work for me since it provides a status bar and a dialog pane to list operations as they occur.

Anyhow, I wrote up a decent document for the program which is included in the attached zip, so read that for operating instructions. The NSIS script is also included and at the top explains which plugins, etc. it needs to operate so you can compile it yourself so you don't have to trust some random fellow's executable.

I'm mainly looking for feedback about performance, testing on other versions of windows (I only have XP SP2 and 98SE machines), efficiency and format of the NSIS Script, and bug reporting (what happens if a file path is really really really long for example, and it could use more testing when copying to and from network shares).

Oh, and the name Queue'eM is a cross of my initials with ''Queue Them'' as in, ''line them up to be copied.'' It also adheres to the 8.3 naming convention (well, ignoring the capitalization).

QM


Thanks for sharing!


You can use LogicLib to make the switches and comparisons a bit simpler. You could also create a function that recurses over a directory and copies the files depending on the result of another function. The other function can be a parameter for the first function, thus saving you from repeating the scan code so many times. To get a function's address, use GetFunctionAddress. To call it later, simply use Call with the variable containing the address.

You should definitly create a Wiki page containing this as an example.