0

Well, i am not joking...

my client wants me to slow down the installation process. The argumentation is clear: if the customers pay as much as a middle-class car for a software, they expect a bit more than 3 sec. installation process...

Any ideas?

Stein Åsmul
  • 39,960
  • 25
  • 91
  • 164
Martin Booka Weser
  • 3,192
  • 5
  • 28
  • 41
  • Just an idea: instead of slowing down the installation process / progress bar, you could exchange the dialog shown during installation, presenting a Billboard-control. This way the customer gets entertained, you can present / market your product and the installation is finished when you tell it to stop (although the "real" installation may be finished already after some seconds). Enrich this installation experience with some custom action as proposed by @Michael-Urman (so the system seems busy) and you're done. Although personally I would present the short installation as big feature... – taffit Mar 14 '14 at 13:13
  • 2
    You could go in the other direction: Automatically launch the application at the end of the installation with a message saying, "Initial setup is complete. You can begin using the application right away. Additional functionality will be installed in the background as needed." Compare with the Office 365 installer. (But be sure to provide an administrative install that will conclusively perform a "complete install.") – Tom Blodget Mar 15 '14 at 18:58
  • @TomBlodget: i would mark this as an answer. After installation i start the application automatically and upon this first start, we are showing fancy progress bars with fancy explanatory texts that take a couple of minutes. – Martin Booka Weser Jul 23 '14 at 11:51

4 Answers4

1

One technique I've used for testing was to write a custom action DLL which alternately slept and incremented the progress bar. And then it ran it backwards, because I was testing external UIs, but you could skip that part. See MsiProcessMessage for the C/C++ API - in particular look at INSTALLMESSAGE_PROGRESS and the Remarks section, and possibly INSTALLMESSAGE_ACTIONSTART and INSTALLMESSAGE_ACTIONDATA if you want to show changing progress text at the time.

I can't imagine intentionally putting that in a real installation (so perhaps give it an easily disabled condition), but it does remind me of the time I had to put a multi-second splash screen on an demo exe that took under a second to load...

Michael Urman
  • 15,737
  • 2
  • 28
  • 44
  • sounds like a good idea. But i've never really used the C++ API... are you familiar with C#? Maybe you can elaborate a bit on how to use this in .NET (pInvoke?) and how to use the resulting dll in WiX? If that's not too much to ask for... – Martin Booka Weser Mar 15 '14 at 13:59
  • I've not used it, but have heard good things about DTF. There `MsiProcessMessage` is wrapped by `Session.Message`. See [this question](http://stackoverflow.com/q/16124164/89999) or [this email thread](http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Show-the-ProgressBar-while-Running-the-Custom-Action-tp5078136p5085924.html) for more info, and if it works out, consider editing it into the answer (or posting a new one). – Michael Urman Mar 15 '14 at 17:59
1

The installation experience and application startup are marketing tools, the setup itself in a technical sense is not. It is just a file dump and some registry modifications and you need to chase all marketing people away from interfering with its technical sanity. Everything else is theirs to define to sell the product.

It is important to remember that the setup experience is the users first encounter with the quality of your product. If it fails the product can't be evaluated at all. This is the most expensive error to make in software development, and it is easy to do if you mess around with bells and whistles.

Go with Tom Blodget's suggestion and make the first application launch "smarter" with more information on how to use the software, what features it provides and stuff like that and keep your setup simple. I have seen successful use of application automation with wizard like data generation, viewlets to show off application features, application panes with online help and voice over. All kinds of stuff that can help to get things working quickly for people.

Here is a post with some abstracted ideas on the issue of software deployment as a topic that needs to be taken seriously as a deal-breaker for otherwise excellent software. And the issue of licensing, and how it is implemented is also a topic that causes a lot of issues for the success of software.

Finally - and this is important - is the issue that corporations require silent installation of your software properly implemented for them to approve your software on their network at all. In fact a proper silent installer and deployment strategy can make your software preferred over other, similar software. The degree to which this is important varies based on your software's focus and type of user, but it must always be properly done for your setup not to be a marketing and sales problem in the long run. A final conclusion from all of this is that if your software is intended for large corporations you should not waste your design efforts on an advanced GUI for your setup as it is likely never to be used for large scale deployment scenarios. Rather you should parameterize your installer with public properties that can be set at the command line or via a transform so that your installer can be controlled easily without running it interactively. See this post: How to make better use of MSI files.

Community
  • 1
  • 1
Stein Åsmul
  • 39,960
  • 25
  • 91
  • 164
0

Thats a strange request considering all of us are trying to somehow speed up the process. Makes sense though :)

Anyways try using the Quiet Execution custom action LINK

Something like this:

<Property Id="QtExecCmdLine" Value="command line to run"/>
<CustomAction Id="QtExecExample" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return="check"/>
.
.
.
<InstallExecuteSequence>
  <Custom Action="QtExecExample" After="TheActionYouWantItAfter"/>
</InstallExecuteSequence>

Change the string "command line to run" to above to do something like may be "ping -n 5 localhost". -n 5 will try to do the ping 5 times. Or you may use the TIMEOUT as well.

Hope it helps.

Isaiah4110
  • 9,855
  • 1
  • 40
  • 56
0

You could go in the other direction: Automatically launch the application at the end of the installation with a message saying,

Initial setup is complete. You can begin using the application right away. Additional functionality will be installed in the background as needed.

Compare with the Office 365 installer. (But be sure to provide an administrative install that will conclusively perform a "complete install.")

Tom Blodget
  • 20,260
  • 3
  • 39
  • 72