This app installs via ClickOnce, a technology that facilitates automatic self-updates after deployment. It can be distributed as a web link, or on a CD. It creates an uninstall item in the control panel for easy removal (though this does not delete any downloaded content.)
Dependencies:
ClickOnce support is built into IE, and there are plugins for both Chrome and Firefox to support it as well. (We could create a page with user-agent sniffing to suggest/direct users to these plugins. The one for FF is called FXClickOnce.)
The app is built on the .NET 4.0 Client common language runtime (CLR), which everyone who keeps their system up to date should have. This version of the framework supports Windows XP (SP3) and newer (though XP users that don’t have .NET 4 will have to jump through a few hoops, the framework components don’t self-install quite as seamlessly on that older O/S.)
It’s also dependent on an open source .zip handling library called ionic.zip I did not include the sources in this project, only the assembly.
When executed the app first checks its settings for the content folder. If that setting is blank, it prompts the user with a dialog, shown in the screen cap (see screen shots.)
If the user has already downloaded and extracted the .zip, clicking the top button opens the standard folder selector dialog (see screen shots) the user selects the “CGM Activist Packet” folder and is good to go.
If he has not downloaded yet, he clicks the bottom button and the app downloads the zip and extracts it for him, to a folder in his AppData tree.
Once content is downloaded and/or its location is established, the simple UI (see screen shots) is displayed. The drop-down list (aka, combo box) at the top shows a list of content sub-folders; when an item in it is selected the files in that sub-folder are shown in the listbox below.
Clicking an item in the listbox executes that item using the Windows Shell (opening the file using the registered handler for its type.)
Currently the app does not contain any file set maintenance functionality, other than its check for a new version of itself, and its ability to self-update. The reason is that we’ll have to decide on server storage details before this will be possible. (It would be ridiculous to re-download the entire zip.) But the underpinnings are there, I have a solid plan, and that functionality will be built into the next release. This release will set them up for that, plus it gives them a desktop shortcut to access the content, and a slightly easier way to browse it (with a lot of potential for better presentation.)
I originally wrote this to use an embedded browser control, to display each file within the app’s window. It worked perfectly until the first time I installed it using ClickOnce, after which Acrobat reader decided there was some security issue, and refused to work. In reality it’s the stupidest thing ever, the app can successfully download and run executables, so what they think they’re protecting with this restriction, I can’t even imagine! All other files worked just fine… irritating! If we want to go back to that model we should publish whatever we can as HTML instead of .PDF, and consider using a 3rd party PDF viewer.
The code works as described above, it has been reasonably tested but not exhaustively so. I have the ClickOnce all setup on my hosting provider, complete with a size-optimized copy of the content (38MB.)
It does not explicitly access the system registry in any way. (ClickOnce does so implicitly.)