tags:

views:

111

answers:

3

I have a setup project that I'm working with and have added a EULA to the User Interface. I need to support both unattended (command line) installation as well as GUI install via running setup. The EULA is enforced in the GUI install but not in the unattended one.

Currently I'm running the command line installation in the following format passing in parameters used in a custom action:

MSIEXEC /i ProjectSetup.msi /qn /l* log.txt Param1="Foo" Param2=Bar

Worst case I suppose I could require an additional parameter "AcceptEULA" and bomb out of the install if it's not found when we're doing a command line installation. Any guidance anyone can provide is greatly appreciated.

+2  A: 

Display the EULA at first run when the GUI is started. Eg. like the various sysinternals tools do it (FileMon, RegMon etc). The good think is that it works with xcopy deployment.

Remus Rusanu
My understanding is that the GUI no/GUI applies to the Setup process, not to the application. The unattended installation (non-GUI) installs a GUI app.
Remus Rusanu
Nothing in the question says that the app doesn't have a GUI. This is a perfectly reasonable solution.If the app doesn't have a GUI, then it could still offer to show it with agree and decline options on the command line when first started.
Andrew Shelansky
The application does indeed have a GUI so I agree that this is a perfectly reasonable response.
Casey Margell
A: 

I generally assume that clicking "Accept" isn't any more legally binding than simply using the software. In some jurisdictions, accepting the EULA is what gives the user the right to install/run the software.

Otherwise, I simply tweak the installer so it never presents EULAs, therefore I'm not bound by them.

tc.
you may not be bound by them, but you may violate some copyrights and intellectual property laws by modifying the MSI in some juridictions... I'm not sure which is worse legally. :-)
Kharlos Dominguez
I don't have to tweak the MSI, though. I can tweak the thing that runs the MSI so it never presents EULAs. Legally, it's still questionable.
tc.
MSI is an open standard and is intentionally designed to be transformable.
Christopher Painter
@CPainter: it's perfectly legal to own a knife, and it's intentionally designed to cut. If I stab a person with it, it's suddenly a problem.
Adriano Varoli Piazza
+1  A: 

Everyone should realize that Param1 Param2 and AcceptEULA cann't be passed to an MSI. Only public properties ( all upper case ) like ACCEPTEULA can be passed.

MSI can easily do this by using a LaunchCondition that keys off of a custom property such as ACCEPTEULA and the built-in property UILevel. The goal is to only allow installation if UILevel=5 or ACCEPTEULA=1 or if the product is (already) Installed

Condition:

UILevel = 5 or ACCEPTEULA or Installed

You must accept the EULA to install [ProductName].

Public Properties: http://msdn.microsoft.com/en-us/library/aa370912(VS.85).aspx

Launch Condition: http://msdn.microsoft.com/en-us/library/aa369752(VS.85).aspx

UILevel: http://msdn.microsoft.com/en-us/library/aa372096(VS.85).aspx

Christopher Painter
This is awesome, thanks Christopher! Any advice for all users vs single users from a command line?
Casey Margell
I bake ALLUSERS=1 into my install and take away the choice of all-users vs per-user. Servicing Per-User installs is a pain in the rear with very little value. You can pass ALLUSERS=1 at the command line in you want.
Christopher Painter