2
votes

I made a MSI-setup for my C#-project with Visual Studio 2013 and WiX Toolset 3.9. The result is a MSI-file which works fine.

But I need also an EXE-file (should do the same, what the MSI-file does), because many users don't know, what MSI is.

I can compile this project, when the output type is "MSI". When I set the output type to "EXE", I get the error: "The localization identifier 'ServiceDescription' has been duplicated in multiple locations. Please resolve the conflict." This is because I have two WXL-files (one for english, one for german), and they have the same string-ids.

I don't understeand, why the compile of MSI works, but the compile of EXE don't work.

My second problem is, that I need both, MSI and EXE. So it would be nice, if I compile the project, I will get both files automated. I don't want to compile the MSI first, change the output type manually and then compile the EXE.

So what I'm doing wrong?

1

1 Answers

4
votes

I don't understand the problem statement of you need an EXE because people don't know what an MSI is. MSI has been out for 16 years and is used across the world. That doesn't make sense to me.

In my experience I only use an EXE when there is a true need for one. It's simpler to stick with an MSI if that's all you need.

Possible reasons for an EXE include:

1) Need to bootstrap / chain other packages

2) Want a nicer non-MSI user interface

3) Want a UI that prompts for language selection

4) Want to cache the MSI locally

5) Want to detect previous version and pass minor upgrade command line arguments

6) Want to ask for UAC elevation up front (not best practice)

7) You want multiple instance servicing capabilities.

8) You want to have a web downloader that pulls packages on demand as needed from the internet.

9) You want to password protect / encrypt the MSI.

10) Other scenarios that might not be remembering.

In general you don't always need an EXE just to have an EXE. In fact the design and testing gets more complicated the moment you choose to have one.

If you want an EXE you first build your setup project (output: MSI) and then you build your WiX Burn based bootstrapper project (output: EXE)