Service Setup - MSI

0

Cześć,
Mam taki problem mam prosty projekt Windows Service i zrobiłem sobie do tego SetupProject żeby instalował usługę, ogólnie wszystko działa z tym, że chciałbym żeby po wydaniu nowej wersji instalka aktualizowała, zamiast ręcznego usuwania poprzedniej wersji i istalowania nowej.
Ustawione RemovePreviousVersions =true, po usunięciu z AssemblyVersion (zakomentowaniu) instalacja przebiega bez komunikatu błędu, ale numer wersji usługi się nie zmienia.
I tu moje pytanie, czy da rade napisać jakiś custom uninstalator żeby go wywołać jako customAction albo, może gdzieś popełniam błąd?
Wszelka pomoc mile widziana i z góry dziękuje :)

0

Okej, odpowiedzi nie dostałem ale udało mi się dojść do niego samodzielnie, więc pozostawiam je tutaj dla potomnych, co by się komuś może przydało kiedyś ;)

Stworzyłem sobie klase dziedziczącą po System.Configuration.Install.Installer gdzie mam sobie void BeforeInstallService który za każdym razem gdy wywoływana będzie instalacja będzie PRZED nią usuwała poprzednią wersję serwisu i wygląda on tak:

         
private void BeforeInstallService(object sender, InstallEventArgs e)
        {
            List<ServiceController> services = new List<ServiceController>(ServiceController.GetServices());

            foreach (ServiceController s in services)
            {
                if (s.ServiceName == this.serviceInstaller.ServiceName)
                {
                    ServiceInstaller ServiceInstallerObj = new ServiceInstaller();
                    ServiceInstallerObj.Context = new System.Configuration.Install.InstallContext();
                    ServiceInstallerObj.Context = Context;
                    ServiceInstallerObj.ServiceName = "xxxNAZWA";
                    ServiceInstallerObj.Uninstall(null);
                }
            }
        }

Dodatkowo możemy sobie w tej klasie ustawić, żeby nasza usługa Od razu po instalacji się uruchamiała:

protected override void OnCommitted(IDictionary savedState)
        {
            new ServiceController(serviceInstaller.ServiceName).Start();
        }
 

Mam nadzieję że może kiedyś typ pomogę :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1