Ho un servizio di Windows, costruito utilizzando C#, che viene installato tramite un progetto di installazione VS2008, e sto avendo un paio di problemi che si verificano con il processo di disinstallazione:Modo corretto per disinstallare un servizio di Windows?
Il servizio non viene arrestato prima di disinstallare
Quando viene eseguita la routine di disinstallazione, viene generato un errore relativo ai file in uso. Se fai clic su Continua, il programma di installazione viene completato correttamente, ma il servizio viene comunque visualizzato nell'elenco, pertanto non viene disinstallato correttamente.
(Al momento, devo ricorrere all'eliminazione manuale utilizzando sc delete servicename).
Sto cercando di interrompere il servizio prima di disinstallare utilizzando il seguente codice, ma non sembra essere entrata in vigore:
protected override void OnBeforeUninstall(IDictionary savedState)
{
base.OnBeforeUninstall(savedState);
ServiceController serviceController = new ServiceController(MyInstaller.ServiceName);
serviceController.Stop();
}
Quando viene chiamato questo codice, e come posso arrestare il servizio prima della disinstallazione?
cartella di installazione non eliminato dopo la disinstallazione
L'applicazione crea anche alcuni file al suo interno cartella di installazione quando viene eseguito. Dopo la disinstallazione, la cartella di installazione (C: \ Programmi \ MyApp) non viene eliminata e contiene i file creati dall'applicazione, sebbene tutti gli altri file che sono stati effettivamente installati dal programma di installazione siano stati eliminati correttamente.
È possibile che il processo di disinstallazione elimini la cartella di installazione, inclusi tutti i file generati all'interno di tale cartella e, in caso affermativo, come?
Grazie.
Vorrei una risposta al tuo primo problema da solo. Si prega di postarlo se mai capirlo. – PaulH
@Mun Ho aggiunto [questo codice] (http://www.primordialcode.com/blog/post/msi-simple-delete-files-custom-action) al metodo 'OnAfterUninstall', ma dice che il File è in corso utilizzato da un altro processo o accesso negato –