Frage

Wie können wir nach der Installation in einer C# benutzerdefinierten Aktion einen Computer neu starten?

Wir verwenden das Setup -Projekt von VS 2005 für unser Setup und müssen programmgesteuert beschließen, einen Neustart zu fordern (so dass es bei jeder Installation nicht auftritt).

UPDATE: Wir suchen nach etwas, das bereits zuerst in das MSI Custom Action System integriert ist. Wenn das nicht existiert, können wir den PC selbst irgendwie neu starten, möchten das aber vermeiden.

UPDATE: Wir sehen, wo Sie Reboot = Kraft setzen können, wenn Sie den MSI in ORCA bearbeitet haben. Können Sie diese Tabellen zur Laufzeit aus einer benutzerdefinierten C -Aktion ändern? Wir könnten dies jedes Mal neu starten, aber das könnte unser Setup ärgern (es muss nur in seltenen Gelegenheiten neu gestartet werden).

UPDATE: Wir haben versucht, einzustellen:

savedState["REBOOT"] = "Force";

Aus der Install () -Methode unserer benutzerdefinierten Aktion, aber kein Glück. Es scheint nicht wie das Idictionary, SavedState tut wirklich etwas.

Auch versucht:

Context.Parameters["REBOOT"] = "Force";

Aber ich denke, diese Sammlung ist nur die Befehlszeilenargumente, die an die benutzerdefinierte Aktion übergeben wurden.

UPDATE: Gibt es eine Möglichkeit, unser MSI mit Orca zu bearbeiten, um diesen Trick zum Laufen zu bringen? Vielleicht einen Neustart unter einer Bedingung einer vorhandenen Datei planen? Wir haben nicht festgestellt, wie MSI -Eigenschaften aus einer C# benutzerdefinierten Aktion festgelegt werden.

UPDATE: Wir haben versucht, uns in Appdomain.Processexit und AppDomain.DomainUnload zu beschäftigen und einen neuen Thread und einen Aufruf zu starten.

War es hilfreich?

Lösung 2

Wie es scheint, ist der einzige Weg für uns, dies zu lösen: beider:

A) Ändern Sie den MSI mit ORCA, um den Setup für jede Installation neu zu starten

B) Wiederholen Sie das Setup -Projekt mit WIX oder installieren Sie Shield

Danke für die Hilfe Jungs.

Andere Tipps

Sie müssen den MSI Custom Action Schedulerboot hinzufügen oder aufrufen http://msdn.microsoft.com/en-us/library/aa371527(vs.85).aspx In Ihrem Installexecutesequenz ,. Sie können dies mit der MSI -Funktion MSIDOAction verwenden. http://msdn.microsoft.com/en-us/library/aa370090(vs.85).aspx In einer benutzerdefinierten Aktion. Bitte beachten Sie, dass die benutzerdefinierte Aktion, die dies plant, eine sofortige benutzerdefinierte Aktion sein muss, keine aufgeschobene benutzerdefinierte Aktion. Dies bedeutet, dass Sie es wahrscheinlich nach dem Installieren planen müssen. Sie können es auch zum Installexecutesequenz mit einer Bedingung auf einer öffentlichen Eigenschaft hinzufügen, die Ihre benutzerdefinierte Aktion festlegt.

Als ich dies tun musste, bevor wir eine Win32 -API -Funktion von user32.dll verwendeten, denke ich, dass dies das war: ExitWindowsex ()

Lancesc hat Ihnen die Antwort gegeben. Sie müssen Schedulerboot ausführen. Der beste Weg, dies zu tun, besteht darin, ihn in die von Ihrer eigene benutzerdefinierte Eigenschaft, die Sie in Ihrer benutzerdefinierten Aktion festgelegt haben, in die InstallexeCutesequenz einzulegen.

Wie Sie bereits erwähnt, ist Wix der Weg für zukünftige Flexibilität. Wix enthält jetzt auch DTF (Deployment Tools Foundation), ein reichhaltiges Satz von .NET -Klassenbibliotheken, die die gesamte Windows -API einwickeln. Sie können dies verwenden, um aus C# einfach auf MSI -Datenbanken zuzugreifen oder C# benutzerdefinierte Aktionen zu schreiben. Ich kann weitere Informationen dazu geben, wenn es wünschenswert ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top