2009-03-09 5 views
1

Während der Einrichtung der Anwendung hat der Benutzer die Möglichkeit, eine neue SQL Server Express 2005-Instanz auf dem lokalen Computer zu installieren, wenn er keinen bereits vorhandenen SQL Server 2005 verwenden möchte aus welchem ​​Grund auch immer.Abbrechen einer programmatisch gestarteten SQL Server Express-Installation

Da die SQL Server-Installation optional ist, habe ich sie nicht als Voraussetzung für mein Installationsprogramm. Stattdessen bündele ich einfach das sqlexpr32.exe Setup auf meinen Installationsmedien und starte es programmatisch mit den entsprechenden Befehlszeilenargumenten, um eine automatische Installation durchzuführen. (Hinweis: Ich verwende das/qb-Befehlszeilen-Flag, so dass die Installation nicht stumm ist, zeigt die Benutzeroberfläche, fragt aber keine Benutzereingabe). Und falls jemand es wissen möchte, ich folge this Microsoft article auf, wie das SQL Server Express-Setup gestartet wird.

Dies ist, was ich in meiner Gewohnheit mache Aktion installieren:

// All this runs on a background thread so the user 
// can cancel my app's setup at any time 

// Launch the installer 
Process setupProcess = new Process(); 
setupProcess.StartInfo.FileName = "sqlexpr32.exe"; 
setupProcess.StartInfo.Arguments = " a bunch of command line args here"; 
setupProcess.StartInfo.UseShellExecute = false; // to avoid a shell window 
setupProcess.Start(); 

// At this point the SQL Server installer is running 

// Monitor the process on 2-second intervals: 
while (!setupProcess.WaitForExit(2000)) 
{ 
    if(WasCancelled) // flag that is set when the user cancels my app's setup 
    { 
     // This following line is my problem. Sending CloseMainWindow does not 
     // seem to work. The SQL Server installer just keeps running. 
     setupProcess.CloseMainWindow(); 
     setupProcess.WaitForExit(); 
     break; 
    } 
} 

// After this point I build a results report for the user. 
// My app's installer does not yet quit even if it was canceled. 

Also meine Frage ist: Wie könnte ich ‚Signal‘ der SQL Server-Installationsvorgang abzubrechen und Ausgang? könnte

setupProcess.Close(); // This closes my handle. Not the target process. 

Und ich möchte natürlich nicht nur den Prozess beenden, wie ich

sein:

setupProcess.CloseMainWindow(); 

Das funktioniert auch nicht:

Diese Linie, alles zu tun scheint nicht Verlassen der Maschine des Benutzers in einem nicht so wünschenswerten Zustand, im besten Fall mit einer Menge von Müll-Dateien oder schlimmer, mit einer beschädigten Installation.

Irgendwelche Ideen? Schlüssel senden oder Benutzerklicks simulieren? Oder hoffentlich etwas weniger hacky?

EDIT:

Ich glaube, ich habe herausgefunden, warum CloseMainWindow nicht funktioniert:

  • Der Prozess beginne ich (sqlexpr32.exe) ist nicht wirklich derjenige, der die Benutzeroberfläche für die SQL Server Installer zeigt , aber eine selbstextrahierende exe, die wiederum den SQL-Server realsetup.exe als Kind-Prozess startet. Also wird dieses Problem noch schwieriger. (=

Antwort

2

Was passiert, wenn Sie bis zum Abschluss der Installation warten, und danach - wenn der Benutzer den Hauptprozess abgebrochen hat - Sie un installieren sofort

Ich weiß, es ist eine Zeit? Prozess, aber es ist klar und einfach.

Verwandte Themen