Après avoir recherché des informations sur le Web, j'ai réussi à créer un service qui, selon la ligne de commande, peut s'installer ou se désinstaller, ou simplement être exécuté en tant qu'application.Désinstallation de Windows Service par programme .NET
Toutefois, le code de désinstallation ne fonctionne pas correctement.
Le code connexe:
Private Function UnInstallService(ByVal args As String(), ByRef errMsg As String) As Boolean
Dim si As New ServiceInfo
If (Not GetServiceInfo(args, si)) Then
errMsg = "Error..."
Return False
End If
If (Not IsServiceInstalled(si.Name)) Then
errMsg = "Error..."
Return False
End If
Try
Dim installer As ServiceProcessInstaller = GetServiceInstaller(si)
Dim stateSaver As IDictionary = New Hashtable
Try
installer.Uninstall(stateSaver)
Catch e As exception
errMsg = "Error..."
Return False
End Try
Catch e As exception
errMsg = "Error..."
Return False
End Try
End Function
Private Function GetServiceInstaller(ByVal si As ServiceInfo) As ServiceProcessInstaller
Dim installer As ServiceInstaller = New ServiceInstaller()
Dim pInstaller As New ServiceProcessInstaller
pInstaller.Context = New InstallContext("", si.CommandLine)
installer.Description = si.Description
installer.DisplayName = si.DisplayName
installer.ServiceName = si.Name
installer.StartType = ServiceStartMode.Automatic
If (si.Account = "LocalSystem") Then
pInstaller.Account = ServiceAccount.LocalSystem
ElseIf (si.Account = "LocalService") Then
pInstaller.Account = ServiceAccount.LocalService
ElseIf (si.Account = "NetworkService") Then
pInstaller.Account = ServiceAccount.NetworkService
Else
pInstaller.Account = ServiceAccount.User
pInstaller.Password = si.Password
pInstaller.Username = si.Account
End If
pInstaller.Context.Parameters("assemblypath") = si.FullPath
pInstaller.Installers.Add(installer)
installer.Parent = pInstaller
Return pInstaller
End Function
Il jette un NullReferenceException dans l'appel à installer.Uninstall Le code pour l'installation est exactement le même, sauf pour vérifier si le service est installé, et appelant Installer.Install puis installer.Commit au lieu de désinstaller. Je le passe exactement les mêmes paramètres.
Une idée?
Eh bien, selon MSDN: "Cette méthode de support s l'infrastructure .NET Framework et n'est pas destiné à être utilisé directement à partir de votre code. " http://msdn.microsoft.com/en-us/library/system.configuration.install.managedinstallerclass.installhelper%28v=VS.80%29.aspx Je vais y jeter un coup d'oeil, de toute façon. Je vous remercie! – raven