1

Long story short, one of my my employer's clients has an aaS platform that relies on a piece of software that's a ClickOnce app. This particular app is developed by a 3rd party software developer, and licensed to my employer's client company. It also happens to have a large number of prerequisite/dependency applications that need to be installed in order for it to function, but are not deployed as part of the ClickOnce installation. Importantly, because it's developed by a 3rd party and licensed, it's not possible to make any changes to the application itself.

Thus far, actually installing the application on endpoints has been handled by the client company by providing a pre-imaged computer, or when their client wishes to use their own hardware, giving their customer service reps a large zip file containing a bunch of .bat scripts they have to run manually on any computer that's to be used as an endpoint for their service. The batch scripts basically do the job of a bootstrapper and install the prereqs, make necessary system configuration changes and checks, and then call the ClickOnce application installer.

As expected, they don't like this solution, and would like an actual installer, so I've set about creating a bootstrapper with WiX/Burn, but I'm now stuck on how to include the ClickOnce application in my bootstrapper project. I can't seem to find documentation on this online, prompting the question:

Can I bundle a ClickOnce application into a WiX bootstrapper? How?

If it makes a difference, the ClickOnce application is published from one of the client company's servers, so I have full access to both the ClickOnce manifest and all the .deploy files.

HopelessN00b
  • 452
  • 2
  • 8
  • 22
  • I assume you can just include it as a ExePackage in the Chain? Just need to figure out the right DetectCondition to determine whether or not you should run the EXE. I've never worked with ClickOnce though. – Brian Sutherland Apr 22 '16 at 18:30
  • @BrianSutherland I'd be thrilled if that was the answer, but as I've never worked with ClickOnce either, I have no idea. Totally uncharted territory for me, and so I'm a bit worried about whether do this might break all the things when the ClickOnce app tries updates itself next, or something of that nature. Seems like it might be bad for me if I was the reason that ten thousand endpoints suddenly stopped working. :) – HopelessN00b Apr 22 '16 at 18:37

1 Answers1

1

You can't make a silk purse of a sow's ear. I think the best you can do is make a dependency installer for a certain version of the ClickOnce installer. No one should expect that a future version of the application would have the same dependencies.

(By that time, though, maybe they'll fix their ClickOnce installer by including dependencies. Or, abandon dependencies that they are having trouble putting into ClickOnce, say those needed for obsolete versions of Windows.)

Once dependencies are installed, you can have the bootstrapper launch the application, which would install or update it. (Logically, this follows the Chain.)

<Variable Name="LaunchTarget" Value="http://example.com/path/product.application"/>

Backing up a bit, you could create an MsiPackage with all of the ClickOnce files, and use a "file://" URI for the LaunchTarget. This would require you to rebuild and redeploy each new version (defeating the nature of ClickOnce), but would isolate you from untested application updates.

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