I can't make the Software Update
Wizard work! Help!
I distributed the
Software Update Wizard with my installer and my users are forced to
download an update the first time they use my software. What
am I doing wrong?
How do I advise my users if their
software is actually already up to date?
My update script is not working! How do I debug it?
How do I update the Software Update Wizard itself, when a new version is available?
Is there something like an "Automatic mode" or "Silent mode", where the updates are executed absolutely without user interaction?
How does the wuw4.dll DLL or wuwstup.exe application communicate with the Windows Service?
My customers
don't use Internet Explorer. Is that a problem?
The Software Update Wizard Service does
not appear to be installed / running in the Services applet and I am
running Windows 2000, XP or 2003
Is it possible to use the Service application without the service having to run all the time?
What is the Software Update Wizard written in?
How is the Software Update Wizard Licensed?
Who is PowerProgrammer? I see references to Data Perceptions - help!
How do I make the update process totally invisible to the user - i.e. with no user interface at all?
After my program updates, does the user's system have to reboot?
Can I use the Software Update Wizard for more than one program?
Does the Software Update Wizard work over a LAN?
Some of my users are getting an error code 12152 - what does this mean?
How do I make the standard Software Update Wizard message boxes look like my customised message box?
Can I make some or all of my update process invisible to the user?
How do I install the Software Update Wizard redistributables using InstallShield?
See Problem Solving.
At its simplest, the Software Update Wizard uses section numbers in your script to determine whether an update is needed. The section number of the last successful update is stored in the WebUpdateSvc4.ini file on the user's PC. Therefore, the first time they use your software and it calls a Software Update Wizard check the Software Update Wizard assumes an update is required because whatever section number you have in your update script has not actually been processed.
You can easily get round this problem using the FileVersion keyword, which lets you make updates conditional on the version number of the file running on the user's PC versus the version number you specify in your script. Please see the script Example 4 for a fully worked and described example script. Alternatively, you must programmatically edit the WebUpdateSvc4.ini file the first time your application runs.
Wuwstub.exe links to wuw4.dll.
Wuw4.dll communicates with the Web Update Windows Service through a named pipe. The name of the pipe is '\\.\pipe\webupdate4'. It also launches WuWUI.exe, the user interface component, at the same time - see architecture.
If you are familiar with using named pipes you can easily omit the wuw4.dll / webstub.exe component and instead call the named pipe directly. The named pipe supports read operations from the client only. That is to say, your client can write the URL of the script update file to the pipe, but cannot read anything from the pipe.
If writing to the pipe directly, you will need to pass the path to the folder which contains your running executable as well, so that the service can temporarily close the executable down prior to updating it. In this case, you should append the path to the executable's folder to the URL, separated by a '|' character, as in the following example:
http://www.yourserver.com/webupdate/webupdate.txt|c:\program files\YourAppFolder\
Note that the URL must start "http://....".
See 'Script Examples - Example 8'.
TopYou are likely to be missing one of the common Windows DLL files. Check that the following files are available in the Windows/System32 folder:
You should be able to source an installer for these files from Microsoft - see:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvc60/html/redistribvc6.asp
If you cannot obtain then from any other source, you should also be able to find them from http://www.dll-files.com/. (If all else fails, contact PowerProgrammer support and we will sort you out!)
Once you have resourced the missing DLLs you should uninstall and reinstall the Software Update Wizard.
The service application normally runs in the background and consumes minimal processor time and memory except when it is processing an upgrade. Any modern version of Windows runs any number of service applications, and a service application provides the most satisfactory overall solution to automatic software updates, benefiting as it does from running in the SYSTEM security context.
You have the option to use WebUpdateSvc4.exe as a standard Windows executable and get the same functionality as in Windows Service mode. The only exception is that a Service runs in the SYSTEM security context, whereas launching WebUpdateSvc4.exe as a simple executable means it runs in the security context of the logged on user. This may or may not be an issue for you, depending on whether the logged on user has sufficient security rights to perform the file updates in your server update script.
To use WebUpdateSvc4.exe as an application all you need to do is append the text[AsApp] to the URL you pass to the Software Update Wizard through the exported WebUpdate() function or the command line you pass to wuwstub.exe.
Visual C++ Version 6.0 with the Microsoft Foundation Class libraries. PowerProgrammer also develops in Visual Studio 2005 using the latest C++/MFC but in order to minimise the installation overhead of the Software Update Wizard we have decided to continue developing in VC6, as most computers already have the dependent Microsoft Dlls already installed.
The Software Update Wizard is a commercial software product.
You do not actually need the source code to productively use the Software Update Wizard.
If you have enhancement requests or have found a bug we would love you to let us know so that all Software Update Wizard users can benefit from the additions. Data Perceptions / PowerProgrammer listens to its customers and tries hard to meet their aspirations for the product. You can contact us at Wizard@DataPerceptions.co.uk.
So, that's a "no" then. Sorry!
If no update is applicable the default behaviour of the Software Update Wizard is to remain completely silent - i.e. to give no visual feedback. This behaviour is (believed to be) appropriate in situations where your software automatically checks for updates as it launches - i.e. without the user clicking a button or selecting a menu option.
If you prefer to make the user click a button or select a menu option to initiate an update check, you can cause a Software Update Wizard message box to appear with your own message saying there are no updates available by appending a block to the end of your server script file, as shown in the sample script file below:
[7]
Filename=/prophecy/prophecy.exe
Message=This update will upgrade your Prophecy software to version 2.0
TargetFolder=C:\Program Files\Prophecy
[99999]
Message=You already have the very latest version of Prophecy!
In this instance, if the user does not have update [7] the Software Update Wizard will download and install it the first time they check for updates.
However, the next time they check they will receive a message box with the text shown in the "Message=" line for the section starting "[99999]":
If you then insert an update [8] section into the server script file, replacing [7], the Software Update Wizard will again process this update for the user. Once update [8] has been successfully processed they will go back to receiving the message box in the [99999] section.
Note: the actual section number "[99999]" is not significant - it simply has to be the highest in the script file. It does not have to be the next sequential number. We have used "[99999]" on the basis that by the time we need "[1000000]" we will either be retired or, if we really have to, will be able to change the number to "[1000000]" in our favourite text editor (Word 2303?)!
The Software Update Wizard is licensed either per single application, or for any number of applications developed within your organisation, depending on which licence you have purchased. See Purchasing the Software Update Wizard.
The reason you are seeing the Interactive Services Dialog (ISD) is because
you are not specifying "
If you omit this setting then the SUW service launches the ExecAfter in the SYSTEM security context. If the process called by your ExecAfter then tries to post an interface you will get the ISD.
If you append "
Within the Vista and later security paradigm the way SUW works is correct, although it sometimes makes it more difficult to get the job done! A service should not be allowed to interact with the desktop because it may then give a limited user access to the whole machine (e.g. via a 'File' / 'Open' dialog box). Equally, if a process requiring Admin rights needs to be run it is correct that the (limited) user sees an elevation prompt. Any other behaviour would constitute a security vulnerability.
If you need to run your ExecAfters in the SYSTEM context to overcome limited user rights then the rule is that the processes you launch in your ExecAfters must have no UI (i.e. run completely silently). Then they will run successfully and with no ISD. Most installers, for example, have command line parameters that allow you to make them run silently.
Data Perceptions is the developer of Prophecy, a business forecasting and planning application. The Software Update Wizard emerged as a separate product out of original work that Data Perceptions implemented in Prophecy. Rather than market the Software Update Wizard under the Data Perceptions 'brand', it was felt more appropriate, due to the more technical nature of the Software Update Wizard, to market it under a different name - PowerProgrammer.
However, the developers of Prophecy for Data Perceptions and the PowerProgrammer Software Update Wizard are one and the same. As developers of Prophecy to many corporate customers, we have found the Software Update Wizard a great way of deploying fixes / new versions of our software with minimum disruption to our valuable customers.
Tray apps have window titles too - you just cannot see them! Download something like Winspector (http://www.gipsysoft.com/) or use Microsoft's Spy++ utility and use it to find the window title text of your tray application.
There will be a slight delay before the tray icon disappears in response to the Software Update Wizard's activity but I this is actually a Windows painting type issue associated with all similar force-close operations on tray apps.
You can also use the 'KillProcess' keyword, which elegantly terminates all running instances of a specified application (and restarts it after the update). If your application is completely window-less then that is in fact the only alternative, but it works equally well for windowed applications and is the recommended option (replacing WindowTitle=) for closing running applications. (Note: KillProcess was added in the Software Update Wizard V3.00 as a superior method for terminating running applications prior to update.)
If the Software Update Wizard http calls for the server script fails then it assumes you are not connected to the internet and remains totally concealed - i.e. no error boxes displayed etc.. Obviously it would not do for disconnected laptop users to keep seeing error boxes whenever they are using the computer not connected to a network. Therefore any message you see would be generated by the firewall, not the Software Update Wizard.
Both the Service application, WebUpdateSvc4.exe and the user interface component, WuWUI.exe, make calls to the internet to download update scripts or your software updates. Both components need to traverse the firewall to do so.
If you want to make the update totally invisible to the user, your needs to use the following options:
Depends on the firewall! The Software Update Wizard uses port 80 exclusively, which is the standard http port. Most software firewalls contain rules which filter access on a per-application basis. Generally the firewall will prompt when a new application tries to use a port and the user can either create a rule which permits or denies access to the port. No update component in the world is going to operate any differently as far as firewalls are concerned - the component would need to be able to programmatically edit the rules list of every firewall known to man (and woman!), which would both be impossible and would also be perceived by users as a massive security risk. If you want update over the web then your customers will have to accept, and should be used to, their firewalls prompting them for rules.
Not normally. If an update is required and you
include the appropriate keyword lines in your script file, the Software
Update Wizard will close your application and download the update,
overwriting (and optionally backing up) your program's file.
It will then restart your program.
However, if your update process does need to replace in-use files which
closing your app does not free up, you can use the MoveFileEx
and Reboot
keywords to replace the in-use files. These keywords are
fully documented in the help file.
Yes. But please note that the single app version gives you license to use the updater for one application title only. The site licence version lets you use it for any number of applications produced by your company.
Yes! See 'Customising the 'Look and Feel' of the Software Update Wizard Dialogs' and 'Software Update Wizard Language Files'
See 'NoSuccessMessage' in the keywords section of the help file. The following example will generate no dialog with the user:
[4] Filename=
http://www.myserver.com/update.exe
NoSuccessMessage
Of course, if you need to close an app with a WindowTitle or KillProcess then the Software Update Wizard will tell the user it needs to do this. To close without permission would be rude :-).
I believe your best option is to use PHP/ASP to achieve your
requirement. See 'Using
PHP/ASP to dynamically generate update scripts' in the help
file.
Alternatively, you could add your own command processing to validate
the update process using 'ExecBefore'
and 'ExecAfter'
keywords in your scripts.
Although the client machine hosting the Software Update Wizard will be a Windows machine capable of authenticating with a Windows Integrated Authentication host, it may connect through a non-Windows proxy server which does not support this type of authentication. Switch to 'Basic authentication' and the error message should disappear.
See here.
See here
The html used in Software Update Wizard message boxes is rendered by the version of the Internet Explorer control resident on the user's machine. When used in this way there are some known instances where the web browser control ignores html tags in the passed text and just displays them as text. Please see this external page for more information.
There are two ways round this issue, which is rare, if you see it: