Introduction
	Please Note : Safe Update 3 requires
	Cryptonite,
	StringTheory and
	NetTalk to work. These items 
	are sold separately.
	
Safe Update allows you to upgrade your program over an
internet connection 
securely and 
automatically. 
	It adds a Check for Updates option to your program, and also provides a 
	framework for pushing updates to your users in a safe manner.
	
	Safety is important here because if your program is being updated 
	automatically, or manually on-demand by the user, then you want to be sure 
	that the content they are downloading and using is content you intend for 
	them to have. If a hacker accessed your web server, and replaced your 
	install file, then you do not want the upgrade to be applied.
	Safe Update can update from a shared network drive, from a local intranet 
	web server, or from a web server on the internet. 
	When your application is updated you need to make sure that the update being 
	downloaded is the genuine article and not a malicious file instead. To 
	achieve this Safe Update includes security in the form of digital 
	signatures. 
Safe Update supports Clarion 5.5 and later, both ABC and Legacy template 
	chains.
Clarion 5 is not supported.
 
Upgrading from Safe Update 1 and 2
	Safe Update 3 has been refactored to make implementation much easier to do, 
	and much easier to maintain in the long run. To this end the simplest way to 
	update to Safe Update 3 is to remove the Safe Update 1 or 2 support, and 
	then re-implement Safe Update 3. Since it takes only a few minutes to do 
	this it is a cleaner solution than trying to maintain backwards 
	compatibility.
	To remove SafeUpdate 1 or 2 from your application;
	
- Delete the SafeDownload and SafeAutoUpdate procedures from your app
- Remove the Safe Update local extension to your Main procedure.
ClarionLive
	ClarionLive
	
	webinar number 183 is an excellent walk-through of the Safe Update 
	process. Watching the webinar is recommended.
	Tip: Right click on the link, and choose "Save Link As..." to save the 
	webinar as a file on your disk.
 
	
The Basics
	If you are keen to get started right away it is 
recommended that you start with the 
JumpStarts 
below, but before you get going it's a  good idea to read the rest of 
this section to make sure that you're familiar with the basic concepts and 
how everything fits together.
TThere are three basic areas of functionality that SafeUpdate provides:
	- Securing
 
 SafeUpdate uses certificates to secure the entire update process. These 
	certificates use the industry standard Public/Private key architecture to 
	sign and authenticate updates. Cryptography can get complicated, so we have 
	endeavored to make the process as simple as possible.
 
- Uploading
 
 This is simply the process of getting the update (your application 
		installer) to the location that the 
		application will download it from.  It includes creating an XML version file for 
	the update, and uploading the files via FTP 
	to the web site.
- Check for Updates
 
 This includes downloading an update, either from the internet or LAN and 
		performing whatever task is required to install that update. This usually 
	means running 
		an installer and closing down the application to allow the install to 
	work. SafeUpdate handles checking for updates, downloading,  verifying 
		updates and running the installer for you.
 
Jump Start
  
Getting a certificate
	TThe Safe part of Safe Update is done by signing the Install file, and 
	Version file before they are uploaded to the web site. Signing requires a 
	certificate.
	Getting a certificate can be a time consuming process, because it needs to 
	be issued by a company that trusts that you are who you say you are. If you 
	don't already have a code-signing certificate then you can read the section "
Getting a Digital 
					Certificate" to find out how to get one.
	
	However because this is a JumpStart, and because that process may take some 
	time, a sample (UNTRUSTED) certificate called "Safe Update Test" has been 
	included in the Safe Update install file. You would not want to use this 
	certificate in a real world situation, however it does provide a substitute 
	for the purposes of getting the basic process in place.
Adding a Version Resource to your Application
	Note that while this section is not required in your application, it is 
	recommended.
	
Adding a Version Resource to your application embeds a 
standard Version Resource file into your EXE. This allows the version 
information to be read from the EXE and also provides the version 
information displayed from the application in Windows (e.g. In Explorer and 
the Programs and Features control panel).
CClarion (6 and later) provides a Global Extension that adds this 
Version Resource to your application and CapeSoft WinEvent provides the 
ability to extract that information and use it with SafeUpdate (and elsewhere 
in your application).
 
		- Add the global extension: cwVersionRes 
		-  Version Resource to your application.
- Enter the details for your application, including 
		the version number (this should be updated each time you update your 
		application to a new version). The version number can include an 
		automatically generated build-number./li>
		
- IIf you wish to make use of the
		
		WinEvent function
		
		ds_GetFileVersionInfo in your own code, then add the WinEvent global extension to your 
		application
 
Adding a "Check for updates" to your application 
This Jump Start shows you how to add Safe Update to your application in order
to be able to download updates.
This guide steps you through: 
	
		- Adding the global extension to your application
- Importing the SafeDownload function into your application
- Entering the Download settings
- Adding the Local extension to the Main procedure
1. Adding the Safe Update Global Extensions to your Application.
 
To add the Safe Update template to your program, add the following to your
application's 
Global Extensions:
  - Activate_NetTalk - Activate CapeSoft's NetTalk.
- Activate_SafeUpdate - Activate CapeSoft Safe Update.
- Activate_Cryptonite - Activate CapeSoft Cryptonite. 
- Activate_StringTheory - Activate CapeSoft StringTheory
2. Import the SafeDownload Function
	Go to the 
Application ->
 Template Utility menu item and go to 
  
Class Safe Update - CapeSoft Safe Update. 
	  
	  Select 
ImportSafeUpdateDownloadABC (for ABC apps) or
	  
ImportSafeUpdateDownloadLegacy (for Clarion/Legacy apps). 
	  
	  
	    A procedure, called 
 SafeDownload will then be added to your application. Note that the
	    names of this procedure must not be changed.
	You can however change the "look" of the window if you wish to.
3. Customize the Settings in SafeDownload
      
On the 
SafeDownload
      procedure extensions go to the 
Safe Update Download Controls local extension. 
	  
	  
	  On the 
Files tab of that extension , fill in 
	the URLs of update file, and the XML version file.
	
	Note that the file names on this tab are either local, or HTTP. Not FTP. The 
	download uses the HTTP protocol, not the FTP protocol. 
	
	The XML version file can have any name - it'll match the name you use in the 
	SafeUp utility later on. (usually it's the same name as the update file, but 
	with an xml extension.)
	
	On the 
Verify tab enter the name of your certificate in the
	
Must be signed by setting.
4. Add the Local extension to your Main procedure
 
	
Go to the local extension of your 
Main procedure.
      
  Add the 
 AutoUpdate - Safe Update Auto Update local extension. This
      will allow your application to check for updates automatically. 
      
	
	
	Optionally, if you would like a menu item, or button to trigger an immediate 
	"check for updates", then create the item or button and enter the use equate 
	for that control on the Manual Update tab. 
      
	
Signing and Uploading Updates to your FTP server
Creating an Install File
The update being downloaded by your program is typically an Installer. The 
	installer can be a custom executable or created with an install system such 
	as SetupBuilder, Wise or even Visual Studio. Using a proper install system to 
	create installers is highly recommended as it ensures that updates work well 
	under all versions of Windows, including those such as Windows 8, Windows 7, 
	Windows Vista and Windows Server 2008, which provide additional security and use 
	UAC (User Access Control).
	
If you don't currently have an installer for your application, then you 
	will probably need to create one using SetupBuilder, or your preferred tool. 
	
Before creating the install for the new version increment the 
		application version and build the app. If you are entering the version 
		directly in the SafeUpdate global extension then change the version 
		here, or if you are using a version resource then change it in the cwVersion Resource global extension.
SafeUpdate Utility
	The process of signing and uploading the files is done by a utility called 	SafeUp3.Exe.
	
		- The SafeUpdate Utility (SafeUp3.exe) is installed 
			into \Clarion\3rdparty\bin (Clarion 6) or \Clarion\Accessories\bin  
			(Clarion 7 and up).
- A shortcut to the SafeUpdate Utility is placed in 
			the Start Menu under All Programs->Clarion Accessories->Safe 
			Update->SafeUpdate Utility
- In Clarion 7 and up SafeUp can be accessed directly 
			by selecting the menu Tools->CapeSoft Tools->SafeUp utility
- The source code for the utility is provided in the 
		Examples\SafeUpdate\Uploader folder. The app can be opened in Clarion 6 
		or later, and requires WinEvent, xFiles, Cryptonite and StringTheory to 
		compile.
		- Run the SafeUp.Exe utility. It looks something like this;
 
  
- The first thing to do, when running it for the first time, is to 
		click on the Import Certificate (PFX Format) button. This will import 
		the PFX file into the Windows Certificate Manager. 
		
 
  
 
 If you have your own code signing certificate, then go ahead and enter 
		the details for it here. You will need to know the password to the PFX 
		file in order to import it correctly. If you do not have a certificate 
		yet, then go ahead an import the Safetester.Pfx file (which is in the 
		\examples\safeupdate\uploader folder). The password to this certificate 
		is capesoft - one word, all lower 
		case, no punctuation. You can leave the Store field blank.
 
 Once you have imported the certificate you can open the Windows 
		Certificate Manager using the button provided. If you expand the 
		Personal Certificates item in the tree, then you should see your 
		certificate (or the Safe Update Test certificate) listed there.
 
  
 
 
- Ok, back to the SafeUp main screen. Time to add your product to the list. Click the 
Insert button to add a new entry for your install file. The form looks 
something like this;
 
  
 
 Note there are two tabs of settings, one to do with the signing, and the other 
to do with the FTP uploading.
- Enter the settings for the Installer and XML Version File
		
		
		  | Update File (Exe) | The name of the Install file which 
			  contains the update. |  | XML Version File | The name of the xml file which will 
			  contain the version number, and signatures |  | Update File Version | The version of the update (if you 
			  are not using the File Version Resource) |  | Read File Version from File | Tick this on so that the 
			  file version as set by your install script is used. |  | Signed By | The name of the certificate. The example 
			  certificate name is Safe Update Test |  | FTP Server | The URL of the FTP server. |  | FTP User | The User Id required by the server (ie the 
			  server login) |  | FTP Password | The password for the user. |  | Update File Directory | The remote directory, on the 
			  server, where the update file must be placed. |  | XML File Directory | The remote directory on the server 
			  where the xml file must be placed. (Usually the same place as 
			  above.) |  
 It's also probable that your install file is code-signed as part of the 
		installer-creation process. The signature added by Safe Update does not 
		"code sign" the installer, so you should continue to code sign the 
		install file yourself as part of your build process.
 Click on OK to save the new record.
 
- 
		Click on the Sign button if you wish to just create the signed files. A 
		copy of the Exe will be created and signed, and the XML version file 
		will be created and signed.
- 
		Click on the Sign and Upload button to sign the file, and also upload it 
		to the web server.
 
 
Examples
 
We strongly recommend using the 
JumpStart provided, as this provides the 
best way to get acquainted with the functionality provided by SafeUpdate.
Demo - Demonstrates downloading 
	and verification of updated using SafeUpdate.
	
Certificate Information 
	- Demonstrates retrieving certificate information. For
	
certificate viewing and management 
	use the tools provided.
Uploader - 
	Signing and Uploading application. A compiled version of this SafeUp3.exe 
	application is shipped with SafeUpdate and installed into the Accessory\bin 
	directory (or 3rdparty\bin for Clarion 6 and earlier).
These examples are in your \Clarion\Examples\SafeUpdate directory. 
Getting a Digital Certificate
A Digital Certificate is needed in order to sign your update file. 
For SafeUpdate a Code Signing certificate is required (other certificates types 
can also be used, although a code signing certificate is recommended). For 
testing purposes free mail certificates can also be used.
Purchase a code signing certificate from a vendor such as 
Comodo. Other options are Thawte and VeriSign, although both are typically a great deal
more expensive. Certificates can be renewed every year, two years, or three
years. Purchasing a three year certificate is slightly cheaper per year. For
SetupBuilder users, Comodo certificates can be purchased through
Lindersoft  for a major discount.
	
Comodo
Certificates cost (at the time of writing)  $179/year,
	or $167 per year if a 3 year certificate is purchased. For SetupBuilder
	users purchasing Comodo certificates through
	
	Lindersoft brings the price down to $79 per year, $143 for 2 years, and
	$200 for three years.
	
	
	http://www.comodo.com/e-commerce/ssl-certificates/code-signing-certificate.php
	
For Lindersoft SetupBuilder users, who need a code signing certificate to
	sign their application anyway, purchasing certificates through LinderSoft is
	a no-brainer (they also offer SSL certificates for securing web sites at a
	major discount):
	
Comodo allows the inclusion of a support email address in the certificate
	details (the only provider who does so at last check).
	
Verisign and Thawte
Verisign ($499/year):
	http://www.verisign.com/code-signing/index.html?sl=a_box
	
Thawte ($299/year, no three year option):
	
	http://www.thawte.com/code-signing/index.html
Installing Certificates
This section covers installation of PFX certificate files (which is the 
	file format used by Windows). Certificates come in a variety of formats, and 
	often the certificate will be provided separately from the private key. If 
	your certificate is not provided as a PFX file then it can be converted to 
	one - see 
Converting Certificate Formats.
	
Installing a PFX is as simple as double clicking on it and following the 
	import wizard. You can also use either of the tools in the Viewing and 
	Managing Certificates section below to install (import) and export 
	certificates, as well as viewing their contents.
	
	Alternatively you can use the SafeUp utility to import the certificate.
	
Viewing and Managing Certificates
Certificates and private keys are provided in a variety of formats, such
	as PFX, PEM, CRT etc. Converting between the various formats can be done
	using the tools provided with SafeUdate. See
	
Converting Certificate Formats below.
	
Certificates can be viewed and managed using one of two tools:
	
		- Certmgr.exe
 
 Provided with SafeUpdate 
			and installed into the Clarion\3rdparty\bin\SafeUpdate 
			(Clarion 6 and earlier) or Clarion\Accessories\bin\SafeUpdate 
			(Clarion 7 and later) directory
- Certificate Manager Snap-in
 
 This is a snap-in for the Microsoft Management Console (MMC) included in 
			most versions of Windows. Adding the snap-in:
 
 
			- Choose Run from the Windows Start menu (or use the Windows+R 
				hot-key).
- Enter "mmc" in the Run dialog and press Run to run the MMC
- From the File menu choose Add/Remove snap-in.. (Ctrl+M)
- Select Certificates from the list, click Add and then OK to add 
				the certificates for the User account (repeat this to add the 
				Computer account if desired). Click OK to close the Add/Remove 
				dialog.
- Choose File->SaveAs to save this console for further use (the 
				save file can be double clicked on to reopen the console with the 
				Certificates snap-in).
 
Both tools allow you to view certificates as well as import and export 
them. The Console snap-in also allows certificates to be moved or copied 
between stores using drag and drop (hold the Control key while dragging to 
copy rather than move), and also allows you to view certificates for all 
stores rather than just the user store (although typically the User store 
will be used).
The screenshot below shows an example of a code 
signing certificate. The Subject field contains the details used by 
SafeUpdate for locating the certificate when signing and verifying.
In this case the CN (Common Name) and O 
(Organization) fields would be used to set the Signed By and Certificate 
Authority in the verification and signing settings.
	
 
Code Signing
Install tools such as SetupBuilder provide built in code signing support, 
	which is the simplest approach. Code signing can also be done using the 
	signtool.exe that SafeUpdate installs  in the
 
	Clarion\3rdparty\bin\SafeUpdate (Clarion 6 and earlier) or 
	
Clarion\Accessories\bin\SafeUpdate (Clarion 7 and later) directory.
	
This tool can be called using a Wizard interface, on the command line, or 
	automated using a batch file:
	
	
		- Using the Wizard interface for signing
			
				- Run the SignTool.exe with the "signwizard" command line option, 
					for example:
 
 c:\Clarion8\Accessory\bin\SafeUpdate\signtool.exe 
					signwizard
 
- This can either be directly on the command line (as above), or 
					by adding "signwizard" to the Target of a shortcut to the tool.
 
- Signing on the command line
		
			- SignTool.exe sign /f mycertificate.pfx 
				/p Password /t http://timestamp.comodoca.com/authenticode /d 
				"Product Name" /du http://www.mywebsite.com /v
				C:\src\MyApp\*.exe
 
- The options used are:
			- /f mycertificate.pfx - the 
				name of the PFX file to use for signing
- /p Password - where 
				"Password" is the password for the PFX file
- /t http://timestamp.comodoca.com/authenticode 
				- timestamps the signature so that even when the certificate 
				expires the signature will remain valid (highly recommended)
- /d "Product Name" - the name 
				of the product being signed
- /du http://www.mywebsite.com 
				-   The URL of the company or product website (optional)
- /v C:\src\MyApp\*.exe - what 
				to sign, this can be a single file or use wildcards to specify 
				multiple files. This signs all EXEs in a directory.
 
 
- Signing using a batch file
				
					- This is identical to signing on the command line except that the 
					calls to SignTool are added to a batch file (a text file with the 
					.bat extension). This batch file can be run to make the calls to 
					SignTool each time that it is needed.
 
Converting Certificate Formats
Certificates and private keys are provided in a variety of formats, such
as PFX, PEM, CRT etc.
	
	
	SafeUpdate installs a folder called SafeUpdate in the
 
	Clarion\3rdparty\bin\SafeUpdate (Clarion 6 and earlier) or 
	
Clarion\Accessories\bin\SafeUpdate (Clarion 7 and later) directory. This contains a number of useful tools, 
	including two specifically for certificate and key conversion:
	
	Using pvk2pfx
This tool allows a PVK private key file and CER 
	certificate file to be merged into a PFX file. PVK and CER are common 
	formats that keys and certificates are provided in. This tool also protects 
	the private key password by wrapping the new PFX file with a new password 
	that is then used to access the key within the file without the actual 
	private key password ever being needed,
	
The pvk2fx tool is called on the command line as follows:
	
pvk2pfx.exe -pvk 
	capesoft.pvk -pi PrivateKeyPassword -po NewPassword -spc capesoft.cer -pfx 
	MyCompany.pfx
	
The above command line assumes that the CER and 
	PVK files have been copied into the same directory as the pvk2pfx.exe.
	
The options are as follows:
	
		- -pvk: The 
		PVK file that contains the private key
- -pi: The 
		password for the private key (PVK file)
- -po: The 
		new password that will be used for the PFX file created
- -spc: The 
		certificate to include in the new PFX file.
- -pfx: The 
		name of the PFX file to create
Using OpenSSL.exe
		- Converting a PFX to PEM, CRT and KEY files.
The openssl.exe tool needs to be called on the	command line:
	
openssl pkcs12 -in whatever.pfx -info -out whatever.pem -nodes
openssl pkcs12 -in whatever.pfx -clcerts -nokeys -out whatever.crt
openssl pkcs12 -in whatever.pfx -nocerts -out whatever.key
	
	
		- OpenSSL Convert PEM
Convert PEM to DER
		
openssl x509 -outform der -in certificate.pem -out
		certificate.der
		
	
		Convert PEM to P7B
		
openssl crl2pkcs7 -nocrl -certfile certificate.cer -out
		certificate.p7b -certfile CACert.cer
		
	
		Convert PEM to PFX
		
openssl pkcs12 -export -out certificate.pfx -inkey
		privateKey.key -in certificate.crt -certfile CACert.crt
		OpenSSL Convert DER
	
		Convert DER to PEM
		
		openssl x509 -inform der -in certificate.cer -out
		certificate.pem
		OpenSSL Convert P7B
	
		Convert P7B to PEM
		
openssl pkcs7 -print_certs -in certificate.p7b -out
		certificate.cer
		
	
		Convert P7B to PFX
		
openssl pkcs7 -print_certs -in certificate.p7b -out
		certificate.cer
		
openssl pkcs12 -export -in certificate.cer -inkey
		privateKey.key -out certificate.pfx -certfile CACert.cer
		OpenSSL Convert PFX
		
	
		Convert PFX to PEM
		
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
		
You can add -nocerts to only output the private key or add -nokeys to
		only output the certificates.?
	
Certificate Information
	You will not need to get a certificate if you are only downloading files 
	as the Update File will already have all the necessary certificate
information embedded in it. However, if you want to check the the serial number of the
certificate, then reading the following paragraph may be useful.
How to Find the Certificate's Serial Number
	Open the Windows Certificate Manager. The easiest way to do this is Press 
	Windows-R (Start / Run) and type 
CertMgr.Msc
This will display a list of all the certificate stores on your computer. The
  certificate you require should be in the '
Current User/Personal'
  store. 
	Double click on the certificate to open it. Then go to the Details tab of 
	the certificate and highlight the Serial Number field. From here you can 
	copy the serial number to the clipboard.
  
Programmer's Guide
	- I want to check for updates on startup
 This option is already enabled by default when you add Safe Update to your
		application. However, you must make sure the 
	AutoUpdate local extension has been added to your application's main window.
- I want to check for updates every couple of days
 Go to the SafeDownload procedure, to the Extensions, Auto tab, 
	and enter the options there.
- I want the user to be able to check for
		updates manually
 See here in the JumpStart.
 
- I want to use Safe Update in a multi-DLL application
 
 The easiest approach is to add SafeUpdate to the exe app as normal.
 
 
		- Add NetTalk, Cryptonite, SafeUpdate and StringTheory to the root 
		DLL, setting their Multi-DLL settings as appropriate.
- Add Safe Update,Cryptonite, NetTalk and StringTheory to your EXE 
		setting the Multi-DLL settings as appropriate.
- Import the SafeDownload procedure into the exe app.
 
- My application gets sent to the system tray when the window is 
		closed. How can Safe Update shut it down properly?
 You'll have to add your own code in this case. You would probably set a
		global flag that would tell your application to shut down completely. Add your
		code to the event:SUshutdown event in your main window. 
		You will need to add the AutoUpdate
		extension to your main window first.
 
The Global Extension
Global General Tab
Disable All Safe Update features
Disables all Safe Update code, useful for debugging to find out whether
a problem is being caused by Safe Update.
	Debugging
	Display Errors
	Errors will appear
	Log Errors
Version Tab
	Use WinEvent to extract from Version resource
	If you have WinEvent added to this application, then you can check
	this box for WinEvent to detect the version of this exe. This means you can
	use an external version resource generator to apply the version resource to
	your application.
	
Program Version
        The current version of this application. This can be any string, so long
        as it is fewer than 40 characters long. 
        
	
Tip: The global variable 
	SafeUpdate:AppVersion is set when your program starts (using either WinEvent 
	or the template setting) so that it can be used in your program - like on 
	Help / About screens and so on.
        
Program Name
        Used for display purposes only. This name will appear at various places
        in the 
SafeDownload window.
Multi-DLL Tab
This is part of a Multi-DLL program
        Check this box if the application has multiple DLLs and Safe Update
        has been added to the root DLL. If this section of the application is
        a DLL this will be ticked as the default.
	
Export Class from this DLL
        Check this box if this section of the application is the root DLL of a
        multi-DLL application.
        
 
Local Extensions
The AutoUpdate Extension
This extension is added to the Main procedure in your application. 
	
OptionsTab
	Manual Control
	Select the
	menu item, or tool bar control, that will allow the end user to trigger an 
	update manually.
	
	
Auto check on startup
	You can enter an expression here. If it evaluates to true, then the 
	download window will (silently) check for an update when your program 
	starts. (The user will be informed if an upload is available.)
	
The SafeDownload Control Template
	This extension is added to the Safe Download procedure.
    
Options Tab
	Update File 
The path to the update file. Can 
	be either a file on the LAN, and intranet URL or a web URL.
	
XML version file 
The path to the version 
	file. Can be either a file on the LAN, and intranet URL or a web URL.
	
	Local Folder for downloaded files
	By default downloaded files will be placed (if validated) in the temp 
	folder. However if you want accepted files to be placed in a specific folder 
	then you can enter it here.
	
	INI File
	Some settings are stored in an INI file. Enter the ini file name here/
	
	Ask User before Downloading
	If this is on then the user will be asked before an update file is 
	downloaded. (The user will always be asked before an update file is 
	applied.)
	
	Installer: Run the following file instead
	If the file being downloaded is not an install file, and a separate install 
	program exists, then you can enter that alternate program name here. 
	
	Run the program with the following parameters
	Allows parameters to be passed to he downloaded file (or alternate 
	installer file) when starting the update.
    Auto Tab
    Do Automatic Checking
	
	If this is on then the program will continue to check for new versions 
	automatically, at regular intervals.
	
	Check every (days)
	Detemine the number of days between checks. Set this to 1 to do a check 
	every day.
	
	Check from Midnight To
	this will randomise the check between midnight and some specific time every 
	day. By randomizing the check the server is not overloaded by all the sites 
	checking at the same time. A typical value here is say 4:00 which means that 
	all sites will do their check sometime between midnight an 4am.
	Verify Tab
	Must be signed by:
	Enter the name of the signer who will sign the updates here. Setting this is 
	highly recommended
	
	Cert Authority
	(not currently used). This will be used to limit certificates to those 
	issued by a specific authority. Using this will reduce your ability to 
	change to a new certificate authority in the future.
	
	Cert Serial Number
	(not currently used). This allows you to require that the update is signed 
	by a certificate with a specific serial number for added security.
	
	Errors to check
	Various items in the certificate which should be checked. It is recommended 
	that all these options are set on.
	
	Failure Option
	(not currently used). Currently if a certificate check fails the update is 
	discarded.
	Objects Tab
	Enter the name of the class, and the name of the object to use here. Usually 
	you can, and should, leave the default values as they are here.
	
 
Version History
 
Download latest version 
here
Version 2.02 Beta (23 December 2011)
	Requires Cryptonite 1.42 or later.
	
		- Update: Compatible with Cryptonite 1.42
- Added File Locked methods
- Added ability to suppress messages
Version 2.01 Beta (23 December 2011)
	Requires Cryptonite 1.24 or later.
		- Added: If the root DLL name is blank 
		then no prototypes for the SuAutoUpdate and SuDownload procedures are 
		exported in Multi-DLL applications. This only applies to those using 
		prototype exporters.
- Fixed: A typo in the template causing an 
		compile error in Legacy when the SafeUpdateDownload template utility was 
		used (TakeEvent called without an object name).
- Fixed: Error in the Server class which 
		did not always copy the XML version file into the store folder, 
		resulting in the update being downloaded at each check.
 
Version 2.00 Beta (15 April 2011)
	Requires Cryptonite 1.15 or later.
		- Added: ClientServer example which demonstrates the new client/server 
		update functionality.
- Added: Safe Update Server
- Added: Safe Update Server local extension
- Added: Safe Update Client
- Added: Safe Update Client local extension
- Added: Auto closedown of running clients when 
		using the client/server when a new update is received
- Added: Automatic update from server on startup 
		for client applications
- Added: "SafeUpdate Server" Option to the Safe 
		Update Download Controls local extension. Switches the object to work as 
		an update server, rather than downloading and installing as a client.
- Changed: refactor of the SafeUpdate classes
- Added: Cryptonite base
- Added: SafeDownload class
- Changed: SafeAutoUpdate moved to using new 
		classes rather the all template generated code.
- Changed: All template generated download code moved to the SafeDownload class
- Added: HttpClient class
- Fixed: potential GPF in file verification
- Fixed: incorrect temp directory
- Fixed: incorrect parameter passing to the SafeDownload procedure
- Changed: Moved the file loading class to a base class
- Changed: Refactoring of the XML handling class
- Fixed: error in the SignFile method when assigning 
		the signer
- Fixed: error in the SignFile method when assigning 
		the certificate provider
- Added: support for additional signer verification 
		parameters
- Fixed: Modified all signing and verification methods 
		with correctly typed parameters
- Added: logging to all methods
- Changed: error handling to be consistent 
		throughout classes and to use a single shared mechanism.
- Fixed: incorrect thread number posting in the the 
		shutdown process
- Changed: Moved all HTTP connection code and error handling 
		to the SuHttpClient class
- Changed: Removed temp files for HTTP handling
- Added: SuHttpClient class methods
		
			- ErrorTrap procedure(string errorStr, string 
			functionName), derived
- PageReceived procedure(), derived
- Process procedure(), derived
 
- Added: SafeDownload class methods:
		
			- Construct Procedure ()
- Destruct Procedure ()
- Init Procedure (*SafeUpdate su, *Window wnd, 
			string iniFile, bool pOnStartup, string pXmlFileName, bool 
			pVerifyFiles), virtual
- SetControls Procedure (long cStatus, long 
			cPromptNoUpgrade, long cProgress, long cGroupDl), virtual
- SetButtonControls Procedure (long cButtonYes, 
			long cButtonNo, long cButtonOK, long cButtonCancel, long 
			cButtonCancel2, long cButtonInstall), virtual
- SetInfoControls Procedure (long cInfo, long 
			cInfo2, long cInfo3, long cInfo4), virtual
- Display Procedure()
- GetUpdateFile Procedure (), virtual
- GetLocalFile Procedure (), virtual
- VerifyMsgFile Procedure (), virtual
- ProcessVersionInfo Procedure (), virtual
- ProcessFile Procedure (), virtual
- InitialWin Procedure (), virtual
- AskToUpgradeWin Procedure (), virtual
- NoNewVerWin Procedure (), virtual
- NoVersionWantedWin Procedure (), virtual
- SetOption Procedure (long pOpt, ? pVal), 
			virtual
- GetOption Procedure (long pOpt), string, 
			virtual
- RunSetup Procedure (), virtual
- ButtonYes Procedure (), virtual
- ButtonNo Procedure (), virtual
- ButtonOK Procedure (), virtual
- ButtonCancel Procedure (), virtual
- CheckNoUpgrade Procedure (), virtual
- TakeAccepted Procedure (), virtual
- TakeEvent Procedure (), virtual
- WindowInit Procedure (), virtual ! Call from 
			Windows.Init to load setting and set up the object
- SetDownloadOptions Procedure (bool 
			askUser=true, bool isServerApp=false, <string clientXmlFile>, |
 string downMsgFile, 
			string downXmlFile, <string clientUpdateFile>, |
 <string 
			clientInstallPath>, string versionTag), virtual
- SetInstallOptions Procedure (bool 
			downloadAndInstall=true, bool runAfter=true, bool 
			seperateInstaller=true, |
 <string installer>, bool storeDownload=true, bool keepSig=false, 
			bool userLocation=false, |
 <string storePath>, bool askFirst=true, bool cacheOff=false), 
			virtual
- SetVerificationOptions Procedure (bool 
			verify=true, <string signer>, <string certProv>, <long serial>, |
 long failures, <string csp>, string action), virtual
- StartUpdate Procedure (), virtual
- WindowKill Procedure (), virtual
 
- Changed: Cleanup of SuXml class
- Changed: SuXml is no longer the base class, the generic 
		suFile class is the base class and SuXml inherits and builds on the 
		functionality that it provides.
- Changed: Removed all old source files. SafeUpdate now 
		comprises of suxml.clw, suxml.inc, supdate.clw and supdate.inc. All 
		other core functionality is provided by Cryptonite.
- Deprecated: (and removed) the CheckForHTTPError 
		method. All error handling is done in the HTTP client object itself.
- Changed: Removed temp file stored for HTTP error handling. 
		Error handling and checks are now done directly on the data returned by 
		the server.
- Changed: Refactored the csFile class into a generic file 
		reading and writing class with additional methods for handling 
		signatures etc.
- Fixed: Incorrect parameter passing for the file 
		handling APIs
- Fixed: The Signature reading, writing, removal 
		and verification could fail if the file pointer happened to fall on the 
		same value as the API error code for an invalid file pointer (the API 
		error code is only relavant if GetLastError indicates tha the API 
		failed, otherwise the return value is a valid file pointer).
- Fixed: Certificate fields other than the common 
		name were not correctly parsed and not available for validation.
- Added: Improved certificate field handling. All 
		certificate fields are now processed and available.
- Added: New types for storing certificate and other 
		data to allow easy processing and handling.
- Fixed: AutoUpdate calling the Download function 
		multiple times at startup.
- Added: SafeUpdate Server and Client for automated 
		downloading of client updates and distribution of client updates across 
		a LAN
- Added: New SafeUpdate Server and Client Example
- Deprecated: Old "server" option is now deprecated 
		(use the improve client/server functionality)
- Added: Auto-shutdown for SafeUpdate Servers to 
		inform clients of a new update
- Added: Automated updated on startup for client 
		applications
- Added: Automated retrieval and verification of new 
		versions of the client software by SafeUpdate Servers
- Added: Client update version number retrieval 
		methods
- Added: suServer class to implement the Safe Update Server side of 
		automatic update notification and client closedown.
- Added: suServerCloseClients class to implement the Client side of 
		automatic update notifications across the LAN and client closedown.
- Fixed: SafeUp application not reporting the status correctly after 
		signing/uploading.
Version 1.27 (18 March 2010)
		- Fixed Clarion 7 compatibility (a template issue 
		was preventing the update code from actually being called).
Version 1.26 (7 January 2010)
		- Fixed Mult-Proj compatibility. The Crypt32.lib is
		now included in the correct section of Multi-Proj generated projects.
- Changed docs to cover purchasing a certificate as
		the free certificate from Thwate is no longer available.
Version 1.25 (8 September 2009)
		- Improved support for legacy apps when multiple
		    global class templates are used. (update tpw to edition 1.63)
Version 1.24 Beta (1 September 2009 ) 
	- Updated the SafeUp signing application. An additional SafeUpExtra.app is
		now also shipped, which includes additional templates to provide enhanced
		functionality (this app is completely optional and provided for those who
		have the additional templates).
Version 1.23 Beta (28 April 2009 ) 
	- Fixed: GPF when signing updates and generating an XML signature file.
- Updated the SafeUp signing application.
Version 1.22 Beta (06 January 2009 ) 
	- Fixed incorrect template in C7 install.
Version 1.21 Beta (10 November 2008)
	- Clarion 7 compatible install.
Version 1.20 Beta (21 August 2008)
	- Fixed: Potential GPF in SafeUpdate when checking signatures.
- Fixed: The Windows\Temp\ directory being used for storage. Temporary
	files are now stored in the system Temp directory, which is Vista compatible.
- Added: Option to use the version resource information for the
	ProgramName and Program Version.
Version 1.16 Beta (31 August 2007)
  - Store file after download now defaults to 1.
- Template - fix for legacy class generation (includes SafeUpdate01.tpw 1.54).
Version 1.15 Beta (12 June 2006)
  - New SafeUp01.tpw - fix for interference with other templates (using the Object01.tpw template).
- The download path is for storing the file defaults to the current directory instead of blank.
- If the download path is set to blank, then the application automatically uses the current directory.
- SafeUp now reports all errors as well as logging them.
- SafeUp displays the status of the last request, informing the user of success or failure.
- Fixed problems with FTP and added an icon to the window to ensure that it does
    not get "lost" in the background.
- Added error reporting for FTP, so if it encounters an error it is reported to the user etc.
Version 1.14 Beta (24 April 2006)
  - New automated certificate installation.
- Fixed problem with an installer than had zero size files.
Version 1.13 Beta (23 January 2006)
  - Reworked a number of options, the documentation and main example
      application in order the make basic use simpler.
- The Demo application can now simply be compiled and run to demonstrate updating,
      removed the necessity to compile multiple version, copy files etc.
- Added test certificate that can automatically be installed, this certificate
      is used by the example applications
- Made using the SafeUp program the default rather than creating .cfg files and
      manually entering details (which is now completely superfluous, enter them
      once in SafeUp and press the button to sign, or to sign and upload the updates)
- Remove sections of the docs that were superfluous.
- Simplified demo documentation
- Added a compiled version of the "update" file for the demo, allowing the demo
      to be run and the update to be tested immediately
- New updater application that ships with the demo (source code included), this
      acts as a "mini installer" allowing an EXE or other file to be downloaded,
      updated and the program restarted without a full installer.
- Changed the template to use the new mini installer to copy files.
- New Installer, added shortcuts, certificate browser shortcut, test certificate etc.
- Still to do: Overhaul Client\Server example to new format.
Version 1.12 Beta (6 December 2005)
  - Simplified the general use of SafeUpdate. This means that a number of
    options have been removed in order to simplify the product. Options removed:
    Create (or not) the XML version file, specify the version tag in the XML
    file, specify an external method of FTP (only NetTalk is used), optional
    signing removed (always signs). Requires a new version of SafeUploader.
- SafeUploader documented. 
Version 1.11 Beta (25 November 2005)
  - You can now hide the file path details while the update file is downloading.
- Added an option in the AutoUpdate extension to make SafeDownload silent when the procedure is added
    from the AutoUpdate extension.
- Bug fix: SafeAutoUpdate did not always check for an update on startup.
Version 1.10 Beta (16 November 2005)
  - Added an item to the AutoUpdate extension so that you can specify a
    control that will start a manual check for updates. This was done so that
    you don't have to use the SafeDownload embed. It's much easier to use too.
- Added helpful default values to the templates.
- Bug fix: Programs that only used the SafeUpload template didn't compile in v1.09.
- SafeUp: Removed the Add To Signed Name option. The default name extension is now '_signed'.
Version 1.09 Beta (21 October 2005)
  - Added the SUshutdown event to the main window. This gets sent immediately
    after the update file is run by SafeDownload. Put your shutdown code here:
    this will be needed if your application gets sent to the system tray.
- Bug fix: when an SUactivatewindow event was received, the window was put
    into AcceptAll mode by the Select() procedure. The Select() code has now been removed.
- Bug fix: When SafeDownload was hidden, no auto-run of the update file took
    place. Also, the window would remain open but hidden.
- Revised the documents.
Version 1.08 Beta (6 October 2005)
  - Bug fix: fixed client/server process.
- Bug fix: the update file that is run by SafeDownload was opened maximized.
- Number of days between updates can now be entered as a variable.
- Better-looking icon in the SafeDownload window.
- Extra option in SafeAutoUpdate to show the SafeDownload window as well.
Version 1.07 Beta (4 October 2005)
  - Bug fix: SafeDownload embed: parameter list options were switched. This
    made it look as if the download was not working.
- Bug fix: SafeAutoUpdate prototype had changed in v1.06: reverted to old prototype.
- Bug fix: SafeDownload embed also reverted to previous version.
- Bug fix: fixed demo apps. Broken because of the above change.
Version 1.06 Beta (3 October 2005)
  - Bug fix: Template fix: 'window' should have been '%window'
- Close-down code for SafeDownload has been changed.
- New support for client/server applications has been added. This allows the
    server to download the latest client update.
Version 1.05 Beta (29 September 2005)
  - Bug fix: The Start Safe Download code embed didn't work when Auto-update
    was disabled and a quiet update was required.
- Provision for a variable has now been made in the Start Safe Download code
    embed.
Version 1.04 Beta (23 September 2005)
  - Bug fix: SafeDownload didn't display No New Version when the program
    didn't need updating and an XML file error occurred.
- The digital certificate serial number was not parsed correctly when
    verifying.
- This document now draws attention to the fact that if you ever need to
    re-install your digital certificate, the serial number will change.
Version 1.03 Beta (21 September 2005)
  - Bug fix: minor change to the SendFTP template.
- The issuer certificate is now not checked for by default (SafeDownload
    verification tab). Checking for this created problems with the demo.
Version 1.02 Beta (20 September 2005)
  - Bug fix: didn't read the application name from the cwVersionRes file.
Version 1.01 Beta (16 September 2005)
  - Bug fix: Nettalk error suppression was not turned on in the TXA files.
- Added support for the cwVersionRes template. Can now read the version and
    application name from the file that this template generates.
Version 1.00 Beta (14 September 2005)
  - First release of CapeSoft Safe Update.
 License & Copyright
  This template is copyright 2012 by CapeSoft Software. None of the included
  files may be distributed. Your programs which use Safe Update can be distributed
  without any royalties.
  
  This product is provided as-is. Use it entirely at your own risk. Use of this
  product implies your acceptance of this, along with the recognition of the copyright
  stated above. In no way will CapeSoft Software, their employees or affiliates
  be liable in any way for any damages or losses you may incur as a direct or
  indirect result of using this product.