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

MSI Repair-Funktion startet viel zu früh


2 replies to this topic

Dr. Duck

Dr. Duck
  • Full Members
  • 1 posts

Posted 17 May 2011 - 18:04

Hallo @ All,

ich habe folgendes Problem bzw. Phänomen. Ich habe eine kleine recht unspektakuläre Anwendung mit dem Repackager aufgezeichnet. Anschließend mit InstallShield 2011 weiter bearbeitet.

Die Anwendung soll per SMS 2003 auf User-Clients silent installiert werden. Die Benutzer-Konten hängen im Active Directory und bekommen so einige Policies bei der Anmeldung verpasst.

Nun zu meinem Paket-Problem bzw. erstmal zu den Funktionalitäten, die nach meiner Repacketierung grundsätzlich auch funktionieren:

1. Über die Upgrade-Funktion wird per GUID nach meinem auch selbst erstellten Paket gesucht und ggf. problemlos deinstalliert.

2. Die Falldateien, die das Programm anlegt / speichert, liegen bei uns grundsätzlich auf H: (Homelaufwerk auf dem Fileserver) Damit das immer funktioniert, (auch wenn sich mal ein Admin zum Testen der Installation anmeldet), habe ich das über eine VARIABLE bei der erstmaligen Erstellung der INI-Datei, beim erstmaligen Programm-Start gelöst.

Hier wird dann immer der gefundene Pfad zum User-Verzeichnis automatisch in das Programm (bzw. die Ini-Datei) eingetragen.

3. Damit die Dateien auch immer in einem bestimmten Ordner abgespeichert werden hab ich eine CA eingebaut, die folgendes per VBScript überprüft:

a.) ist das H: Laufwerk vorhanden und wenn ja,
b.) überprüfe ob ein bestimmer Ordner vorhanden ist. Falls der Ordner fehlt, wird er automatisch angelegt. Falls er da ist, passiert halt nix.


Damit das Ganze auch funktioniert bzw. nur einmal beim erstmaligen Programm-Start (aber für jeden User) durchgeführt wird, habe ich die Repair-Funktion folgendermassen genutzt:

Unter HKCU habe ich eine eigene Dummy-Datei als Komponente angelegt. Diese dann an das Haupt-Feature angehängt und einen Key-Path drauf gesetzt.

Da bei uns die SMS-Pakete in der Regel mit dem System-Account installiert werden und das Systemkonto ja auch einen HKCU hat, merkt die MSI ja bei jedem anderen User, der das Programm zum ersten Mal startet, dass die Dummy-Datei fehlt.

Dann rennt die Repair-Funktion los, führt die benutzerdefinierte Aktion aus und der richtige Speicherpfad wird auch gleich eingetragen.

Das funktioniert alles grundsätzlich prima. Zumindest wenn ich das mit dem Lokal Admin oder mit meinem Domänen-Admin (mit zum Test gemappten H:-Laufwerk) teste.

Doppelklick auf das Icon zum Programm-Start und alles wird für den jeweiligen User durchgeführt.

ABER, wenn ich mich nach der Installation mit einem Standard-Domänen-Benutzer (samt Policies usw.) anmelde passiert folgendes Phänomen:

Die MSI-Repair-Funktion startet sofort nach der Anmeldung des Users. UND zwar bevor die ganzen Standard-Laufwerke gemappt wurden. Das ist natürlich unglücklich,

denn da das H-Laufwerk noch nicht da ist, wird weder der Ordner unter H geprüft und ggf. angelegt, noch ist nach der Anmeldung der richtige Pfad in der INI eingetragen.

Nach einer MSI-Schulung vor 2 Wochen hab ich vom Dozenten den Tipp bekommen, die MSI mit dem Flag DISABLEADVTSHORTCUTS zu installieren.

Das hilft aber auch nicht. Die MSI-Repair-Funktion startet zwar nicht mehr direkt bei der User-Anmeldung, aber beim Start des Programms auch nicht mehr.

Hat Jemand eine Erklärung für dieses merkwürdige MSI-Verhalten? Oder vielleicht eine Idee, wie ich das ganze lösen kann?

Vielen Dank schon mal im Voraus für hilfreiche Antworten und die Geduld beim lesen meiner Problembeschreibung.

Gruß

Dr. Duck

Edited by Dr. Duck, 17 May 2011 - 18:07.

Life is, what happens, during making other plans.

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 17 May 2011 - 18:32

Die Frage ist: was will dein Programm schon bei der Anmeldung machen? Normalerweise würde Windows Installer den Reparatur-Check ja erst beim Programmstart ausführen.
Also genau genommen prüft er immer dann, wenn das Programm über einen entsprechenden (Repair-fähigen) Einsprungpunkt aufgerufen wird. Typischerweise ist das der Klick auf einen advertised Shortcut, es gibt aber auch andere, z.B. COM Aktivierung. Installierst du einen COM-Server?

Eventuell helfen Dir die Tipps unter http://www.msifaq.de/a/1037.htm und/oder der Process Monitor von SysInternals herauszufinden, wer das Programm bzw. das Setup aktiviert

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 18 May 2011 - 15:13

Windows Service wäre evtl. auch noch ein Kandidat...