.NET 3.51 Check; Reboot and Block

Feb 17, 2011 at 4:26 PM
Edited Feb 17, 2011 at 5:16 PM

Allow me to begin with a thank you. This software has been a godsend and I really appreciate all the hard-work you've put into this project.

I have a minor issue that I think I'm just missing the key to solving.

I have the following:
2 MSI's linked, one 64bit and one 32bit. Then a .NET 3.51 Check, then finally, an embedded MSI that is opened.  At any point in time, the maximum chain is only: { MSI_A, (Download 3.51 and Install), MSI_B}.

The problems start with the .NET: 

0) Apparently the .NET installer reboots the machine.
[Edit 1: With the reboot text filled out, I do get a dialog stating what I filled out in the reboot required field but, if the user waits a second or two, the reboot is done anyways. It looks like the installer fired the reboot command then told the bootstrap it was doing it. Therefore the bootstrap couldn't do anything about it.

Upon reboot the following happens:

1) The installer is placed in a menu that mentions that it's a blocked startup application. (This does not happen all the time, just some of the time)
[Edit 1: I just overlooked the administrator_required run time flag, I'm currently testing this with it off.]
[Edit 2: Testing it with it off yielded the same results; The bootstrap required administrator access initially, not on-demand during the installation. ]

2) The installer restarts completely. Meaning MSI_A is now being installed again.

The problems I'm facing (I think both already solved, I'm just having some problems executing the solutions)  have the final requirement:
I don't want MSI_A to be installed twice on the original MSI chain, but each time the installer is run independently it is necessary that MSI_A run.

I may be asking for the moon here, and I apologize if I am.

[Edit 1: I just overlooked the administrator_required run time flag, I'm currently testing this with it off.]
Coordinator
Feb 17, 2011 at 4:38 PM

The blocking of the installer upon reboot is a known problem. It has been fixed in 2.0 (try it) where you can now elevate only when you hit install. So the installer will come back to life correctly.

Feb 17, 2011 at 8:40 PM
Edited Feb 17, 2011 at 8:43 PM

dblock,

Thank you for your reply.

Currently I'm using 2.0.673.0. I've noticed good response via Vista x64 but every so often Vista x86 continues to exhibit the blocking still.
I've decided to work around this issue by delaying the reboot until the end. Basically I'm ignoring the reboot request. In doing so, I was wondering if I could use a combination of the status_installed and a check in the last package to determine if the product was installed?

MSI_A
3.5 SP1 INSTALLER (If Installed Skip)
MSI_B
* CHECK (3.5 SP1 INSTALLER (status_installed))
* * If so, reboot, else continue


Would this plan work?

Coordinator
Feb 17, 2011 at 10:29 PM

With 2.0.673.0, did you de-elevate the bootstrapper? That is, does it ask elevation when you hit install?

Feb 17, 2011 at 10:34 PM

I did not de-elevate the bootstrapper. Is this done through the UI or only done through embedding a custom manifest?

I removed the require administrator flag. Vista still prompts for elevation immediately, and now with examining your help document I noticed that the default action is to require elevation.

Shall I embed a manifest that switches to asInvoker?

 

Coordinator
Feb 17, 2011 at 10:35 PM

Correct. Embed a manifest that has asInvoker and remove the flag. See what happens :)

Feb 17, 2011 at 10:39 PM

Thanks. Will do.

As for the "delayed" conditional reboot, is that possible? I've been scouring your documentation (it's very good) but it seems to me that the only way I could accomplish this would be to write something to the registry in the event that .NET is installed and then check for that. I may have missed it like I overlooked the manifest, but I was wondering if there was a check to see if a package was installed by referencing it's install string feature.

Once again, I appreciate all the replies, and your time.

BlD

Feb 18, 2011 at 5:50 PM
Edited Feb 18, 2011 at 7:34 PM

dblock,

1) I have found the source of my problems and that is I'm using 'Basic', which reboots the machine since it doesn't expect any user input.
2) Is there a way to conditionally reboot the machine? As it stands right now, the dotnetinstaller reboots per element, but is there a way to say if Component_A was installed reboot at the end?

 

Once again I would like to thank you for your support, replies, and time.

Coordinator
Feb 20, 2011 at 6:09 PM

I believe it's not possible today. There're a few feature requests in the system that talk about it. You should check that out first and file something to this effect. IMHO reboots are useful - in my experience rebooting when an MSI wants it is the best strategy for successful installs.