2010-03-05 8 views
5

Wie erkennen Sie, dass die Installation im unbeaufsichtigten Modus ausgeführt wird?Ermitteln der unbeaufsichtigten Installation in .NET Benutzerdefinierte Aktion

Ich habe eine benutzerdefinierte Anwendung, die ich ein MSI-Setup-Projekt hinzugefügt habe. Ich führe die MSI-Datei mit der/qb-Schalter, und in meinem benutzerdefinierten Installer C# -Code möchte ich in der Lage sein, dies zu erkennen.

Edit: nobugs sagt, um die UILevel-Eigenschaft zu testen. Wie greife ich auf die UILevel-Eigenschaft von einer Klasse zu, die von der System.Configuration.Install.Installer-Klasse abgeleitet ist?

+0

Was installieren Sie? C#? Benutzerdefinierte App? –

+0

Ich habe die Frage bearbeitet, um anzugeben, dass es sich um eine benutzerdefinierte Anwendung handelt, der ich ein Setup-Projekt hinzugefügt habe, um das MSI-Installationsprogramm zu erstellen. –

Antwort

10

den Hinweis von nobugz nehmen, ich folgendes getan:

  1. Auf der Benutzerdefinierte Aktionen Ansicht des .msi-Setup-Projekt, habe ich folgendes meine Custom (die UILevel durch meine Gewohnheit führen Installateur):

    /UILevel = "[UILevel]"

  2. In meiner C# -Code für den von der Basisklasse Installer abgeleiteten Code, fügte ich Code, um den Wert zu erhalten:

    string uiLevelString = Kontext.Parameter ["UILevel"];

  3. Es war dann einfach, die Zeichenfolge für einen Int-Wert zu analysieren. Wenn der Wert < = 3 ist, handelt es sich um eine automatische Installation.

+1

Könntest du bitte auf Schritt 2 näher eingehen - wo genau schreibst du diesen Code, auf welches Ereignis der abgeleiteten Klasse? Vielen Dank im Voraus –

+1

@Andrei Cristof In Schritt 2 habe ich eine Überschreibung der "Install" -Methode. –

0

Zuerst würde ich darauf hinweisen, dass InstallUtil ein sehr schlechtes Muster ist. Sie haben keinen Prozess mehr, tätowieren den Prozess mit einer CLR-Version und wenn sie fehlschlagen, rufen sie selbst während einer unbeaufsichtigten Installation einen modalen 1001-Fehlerdialog auf.

Stattdessen sollten Sie das DTF-Muster von WiX verwenden.

MsiGetMode (Session.Mode) ist während der verzögerten Ausführung eingeschränkt, daher müssen Sie den UILevel serialisieren und deserialisieren.

http://www.msifaq.com/a/1044.htm

Verwandte Themen