Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Autorepair


8 replies to this topic

PaulDeveloper

PaulDeveloper
  • Members
  • 28 posts

Posted 09 February 2004 - 15:05

I have a project using developer 7.04, with three features. One feature installed (amongst other things) some local executables, one of which had a shortcut. It also installed some files which are normally (but not always) put on a network. Each executable was a separate component, and there was a separate component for the network files.

I found that when I rebooted, clicking on the shortcut caused the installation to autorepair. It was trying to check for the existence of the network files, and since I had not authenticated myself on the network it could not. Logging in to the network solved the problem. In general, renaming or deleting any files within that feature (network or not) caused the autorepair to happen.

The work-around for me was to create an invisible subfeature and put the network files component in this.

This still leaves me puzzled, though, because my understanding was that autorepair worked at a component level, not at a feature level!

Zweitze

Zweitze
  • Full Members
  • 522 posts

Posted 09 February 2004 - 16:06

You assume that a feature installs executables, and shortcuts. That's not the case, the feature just has components. A component has executables, and shortcuts. When you click a shortcut, and the target is not present, the component is reinstalled (provided that the target is the key file of the component).
If you look in the EventLog, you'll see which component was repaired.

BTW: Maybe you were confused by "Install on first use"? That feature does work on feature level: When applied, it's first usage installs all components of that feature.

huckey

huckey
  • Members
  • 13 posts

Posted 24 February 2004 - 06:07

well its all relative to where the advertising is.

ie if you have one feature and one advertised point within that feature than that entire feature would be healed.

however if you have two features at the same level

feature1
feature2 - advertising in here

and your advertising is in only one of those features then only feature two would be healed and feature 1 would remain unhealed

however if you have this

feature1 - advertising here
- childfeature1

then when you run the advertising in feature1 it will heal feature1 but not childfeature1

but next where it gets tricky is

feature1
- childfeature1 - advertising

now the advertising is in the child (which you will commonly see) so if you run the advertising here it heals childfeature1 (entire feature) even if only 1 item is missing.

then it steps up the tree into feature1 where the healing changes to component level

so healing works at feature level if the advertising is in the same feature however it changes to component level if the component is in a parent feature.

therefore in the last example if you have a problem in feature1 only that single component which has the problem will heal.

hope this makes sense its a lil tricky to put into words ;-)


orc4random

orc4random
  • Members
  • 4 posts

Posted 05 March 2004 - 00:22

Hey,

Does any body know how to disable autorepair?

luke_s

luke_s
  • Full Members
  • 532 posts

Posted 05 March 2004 - 06:01

Isnt auto-repair a setting that is set on the user's computer?

You could change the key files, that would ensure auto repair would never run.

InstallDev

InstallDev
  • Full Members
  • 43 posts

Posted 10 August 2004 - 16:49

Hi all,
"however if you have two features at the same level
feature1
feature2 - advertising in here

and your advertising is in only one of those features then only feature two would be healed and feature 1 would remain unhealed"


Is there any way we can do to force feature1 to be healed too.By changing REINSTALL property or using something like MsiSetFeatureState???


Thank you


Glytzhkof

Glytzhkof
  • Moderators
  • 1,447 posts

Posted 11 August 2004 - 10:31

I definitely believe that reinstall is done at the feature level based on any broken keypaths found. The reason is simply that it is the features the user choses to either install or not install. Hence, depending on the feature state, a component that is missing is not automatically supposed to be "repaired".

Self-repair cannot be turned off unless you assign empty component GUIDs to all components, and even then windows installer might assign GUID's to directories and their deletion could cause a self repair. In general unexpected self repairs is a sign of a poorly designed installation package and must be fixed.

"When an advertised access point is triggered, say an advertised shortcut is launched, Windows Installer will then check the keypaths of all components within the feature which contains that particular shortcut and all parent features of that feature. If no broken components are found no repair occurs. If a broken component is found in any feature then Windows Installer will check the keypaths of all components within ALL features of the MSI and then perform the repair."

http://www.ewall.org...ay-ceid-23.html
Regards
-Stein Åsmul

SourceList

SourceList
  • Members
  • 15 posts

Posted 18 August 2004 - 14:16

QUOTE (orc4random @ 2004-03-05 00:22)
Hey,

Does any body know how to disable autorepair?

You can removed the GUID of the component - it wouldn't self repair or uninstall
James
~~~~~
dotMSI.com

Glytzhkof

Glytzhkof
  • Moderators
  • 1,447 posts

Posted 19 August 2004 - 14:19

Yes, as I wrote above a blank GUID would do it, but this also throws out all special windows installer features. If you assign blank GUID's to all components you could just as well use a legacy, script based setup creation tool. This would result in faster installation since windows installer has a lot of overhead.
Regards
-Stein Åsmul