2009-03-09 7 views
1

Lors de la configuration de l'application, l'utilisateur a la possibilité d'installer une nouvelle instance SQL Server Express 2005 sur l'ordinateur local s'il ne souhaite pas utiliser SQL Server 2005 déjà existant dans son environnement. réseau pour une raison quelconque.Annulation d'une installation SQL Server Express lancée par programme

Comme l'installation de SQL Server est facultative, je ne l'ai pas comme prérequis de mon programme d'installation. Au lieu de cela, je viens de regrouper la configuration sqlexpr32.exe dans mon support d'installation et de le lancer par programme avec les arguments de ligne de commande appropriés afin d'effectuer une installation automatique. (Remarque: J'utilise l'indicateur de ligne de commande/qb pour que l'installation ne soit pas silencieuse, il montre l'interface utilisateur, mais ne demande aucune entrée utilisateur). Et au cas où quelqu'un veut savoir, je suis this Microsoft article sur la façon de lancer l'installation de SQL Server Express.

C'est ce que je fais dans mon installation personnalisée l'action:

// 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. 

Ma question est la suivante: Comment pourrais-je « signal » le processus d'installation de SQL Server pour annuler et quitter?

Cette ligne ne semble pas faire quoi que ce soit:

setupProcess.CloseMainWindow(); 

Cela ne fonctionne pas non plus:

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

Et évidemment je veux pas tuer tout le processus que je pourrais être laisser la machine de l'utilisateur dans un état pas si désirable, dans le meilleur des cas avec beaucoup de fichiers à ordures ou pire, avec une installation corrompue.

Des idées? Envoi de clés ou simulation de clics d'utilisateurs? Ou j'espère que quelque chose de moins hacky?

EDIT:

Je pense que je l'ai découvert pourquoi CloseMainWindow ne fonctionne pas:

  • Le processus que je commence (sqlexpr32.exe) n'est pas vraiment celui qui montre l'interface utilisateur pour l'SQLServer Installer , mais un exe auto-extractible qui à son tour lance le serveur SQL réelsetup.exe en tant que processus enfant. Donc, cette question devient encore plus difficile. = (

Répondre

2

si vous attendez jusqu'à ce que l'installation terminée, et après que - si l'utilisateur a annulé le processus principal - vous un installer immédiatement

Je sais qu'il est un plus de temps? processus de consommation, mais il est clair et facile

Questions connexes