Software Update Wizard - FAQ


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?

I'm seeing an Interactive Service Dialog when I run my updates under Vista / Windows 7 / Windows 8 / Windows 10.  I thought the Software Update is UAC compatible!

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?

Can I have the source code?

How is the Software Update Wizard Licensed?

Who is PowerProgrammer?  I see references to Data Perceptions - help!

Will Software Update Wizard run an exe program to complete the update? In other words, can I create a patch that runs as an exe that will update my program and have Software Update Wizard run that exe? Or will your update program only work with zipped files?

My application cannot be exited just by clicking the Close (X) button the application window, as it also has the system tray icon. To exit it, my users do a right-click on the system tray icon and then exit. I could not find a way to terminate the process for my application given the window title name. Is there a way to do that?

How do I make the update process totally invisible to the user - i.e. with no user interface at all?

What kind of error message would a user see if the firewall prevents the user from using the Software Update Wizard?

Do you have any documentation on what the user should do in order to make the Software Update Wizard a permitted application?

After my program updates, does the user's system have to reboot?

Can I use the Software Update Wizard for more than one program?

The screen where the update wizard is retrieving the file is not adaptable. is there a way that we can customize that screen?

Our clients purchase yearly support subscriptions which give them access to program updates. We need to be able to restrict access to updates to only those clients who have active support subscriptions.

Does the Software Update Wizard work over a LAN?

How do I suppress the display of the console window when I call WebUpdateSvc4.exe directly from my application?

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?

The html tags in my Keyword= / FinalMessage= messages are being rendered as plain text in the Software Update Wizard dialog boxes


Q: I can't make the Software Update Wizard work. Help!

See Problem Solving.


 

Q: 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?

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.

Top

Q: How does the wuw4.dll DLL or wuwstup.exe application communicate with the Windows Service?

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://....".

Top

Q: How do I update the Software Update Wizard itself, when a new version is available?

See 'Script Examples - Example 8'.

Top

Q: My customers don't use Internet Explorer.  Is that a problem?
No, as long as IE 5.5 or later is installed.  If they access the internet through a proxy server than that must be configured either in IE or via the Control Panel / Internet Options applet.
Top

Q: The Software Update Wizard Service does not appear to be installed / running in the Services applet and I am running a version of Windows that supports Service applications

You 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.

Top

Q: Is it possible to use the Service application without the service having to run all the time?

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.

Top

Q: What is the Software Update Wizard written in?

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.

Top

Q: Can I have the source code?

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!

Top

Q: How do I advise my users if their software is actually already up to date?

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?)!

Top

Q. How is the Software Update Wizard Licensed?

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.

Top

Q. My update script is not working!  How do I debug it?
  1. Check that the Software Update Wizard service is actually running on the test computer and that a valid Software Update Wizard licence file (WebUpdateSvc4.lic) is located in the same folder as your running application (the application which calls the Software Update Wizard).
  2. Check the syntax of each keyword line against the keyword reference examples in this help file.  Note that keywords ARE case-sensitive.
  3. If the script is unable to download a file needed for the update, check you have a leading '/' character in your Filename or Zipfile keyword line or that you have specified the full URL, including the "http://" part..
  4. If the script is unable to download a file needed for the update, can you download it by typing the URL into the address bar of Internet Explorer?  If not, perhaps there is a security configuration issue on your server.
  5. Check the WebUpdateSvc4.log file, which is maintained by the Software Update Wizard service as it runs.  You will find this file in the same folder as WebUpdateSvc4.exe - normally the System32 folder.  Check for error messages and that the log confirms that the steps you expected from your script have been completed.
  6. Switch SuperLogging in the WebUpdateSvc4.log file on, as described here.
  7. If your ExecBefore or ExecAfter commands are not working correctly, ensure that you use quotation marks where the path is or expands to a long filename.
  8. Start with a simple script and add to it one line at a time.  Test on each added line.
  9. Ensure that your test environment is set up correctly - i.e. you start with the correct versions of files, folder contents etc..  If you see inconsistent behaviour from the Software Update Wizard between tests then this is the most likely cause.
  10. See also: Problem solving.
Top

I'm seeing an Interactive Service Dialog when I run my updates under Vista or later.  I thought the Software Update is UAC compatible!

The reason you are seeing the Interactive Services Dialog (ISD) is because you are not specifying "<AsUser>" in your ExecAfter (or ExecBefore) commands.

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 "<AsUser>" to your ExecAfter then the process will be launched by the SUW UI component (WuWUI.exe) in the logged on user's security context and no ISD will appear.  However, of course, if elevation is required then a UAC prompt will appear.

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.

Top

Q: What is the relationship between Data Perceptions and PowerProgrammer?

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.

Top

Q: Will Software Update Wizard run an exe program to complete the update? In other words, can I create a patch that runs as an exe that will update my program and have Software Update Wizard run that exe? Or will your update program only work with zipped files?
Top

Q: My application cannot be exited just by clicking the Close (X) button the application window, as it also has the system tray icon. To exit it, my users do a right-click on the system tray icon and then exit. I could not find a way to terminate the process for my application given the window title name. Is there a way to do that?

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.)

Top

Q: What kind of error message would a user see if the firewall prevents the user from using the Software Update Wizard?

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.

Top

Q: How do I make the update process totally invisible to the user - i.e. with no user interface at all?

If you want to make the update totally invisible to the user, your needs to use the following options:

Top


Q: Do you have any documentation on what the user should do in order to make the Software Update Wizard a permitted application for my firewall?

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.

Top

Q: After my program updates, does the user's system have to reboot?

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.

Top

Q: Can I use the Software Update Wizard for more than one program?

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.

Top

Q: The screen where the update wizard is retrieving the file is not adaptable. is there a way that we can customize that screen?

Yes!  See 'Customising the 'Look and Feel' of the Software Update Wizard Dialogs' and 'Software Update Wizard Language Files'

Top

Q: Is there something like an "Automatic mode" or "Silent mode", where the updates are executed absolutely without user interaction?

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 :-).                                

Top

Q:Our clients purchase yearly support subscriptions which give them access to program updates. We need to be able to restrict access to updates to only those clients who have active support subscriptions.

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.

Top

Q: Does the Software Update Wizard work over a LAN?
The Software Update Wizard is designed to deliver software updates over the web. It uses 100% http: protocol in order to do this.  Therefore, if you want to use the Software Update Wizard over a LAN (Local Area Network) then you must install and run a web server on that LAN.  There are no special requirements for the web server, as only http: is used by the Software Update Wizard.  A (relatively) simple one like the the Abyss Web Server from http://www.aprelium.com/ is excellent, free and very compact.  The HFS Web Server is also free, even simpler and lightweight and is ideal for testing Software Update Wizard scripts.

However, no, the Software Update Wizard cannot operate against a drive letter and path or a UNC. 
Top

Q. How do I suppress the display of the console window when I call WebUpdateSvc4.exe directly from my application?
If you are calling WebUpdateSvc4.exe via a ShellExecute() API call or equivalent you should use SW_HIDE as the nShowCmd display argument.  This will suppress the console window display and the Software Update Wizard will still display its own windows correctly.
Top

Q. Some of my users are getting an error code 12152 from the Software Update Wizard and the updates fail. What is error code 12152?
The most likely cause is using Windows Integrated Authentication (formerly known as 'NTLM') to store your update scripts or update files on your server behind a password protected folder.

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.

Top

Q. How do I make the standard Software Update Wizard message boxes look like my customised message box?

See here.

Top


Q. Can I make some or all of my update process invisible to the user?
See here.

Top


Q. How do I install the Software Update Wizard redistributables using InstallShield?

See here

Top


Q. The html tags in my Keyword= / FinalMessage= messages are being rendered as plain text in the Software Update Wizard dialog boxes

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:

Top