Announcement

Collapse
No announcement yet.

ServiceController serialisieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ServiceController serialisieren

    Hallo,

    Ich schreibe grad ein Tool welches Dienste in ein Profil speichern kann, dazu benutze ich den ServiceContoller un die Dienste anzeigen. Ich möchte diese angelegeten Gruppen welche z.B 3 Dienste haben ja auch abspeichern sprich serialisieren.

    Meine Klassen:
    Eine Servicegruppen Klasse welche den Namen des Profils enthält und zusätlich eine List mit den ausgewählten Services. Eine Klasse die die Serialisierung übernimmt.

    Hier mein Fehler:
    Der Typ "System.ServiceProcess.ServiceController" in Assembly "System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" ist nicht als serialisierbar gekennzeichnet.

    im Internet steht aber das man mit der Surrogate Serialisierung alles serialisieren kann.

    Hat jemand ne idee wie das lösen kann evtl auch andere Methoden

  • #2
    Zeig mal ein wenig Code(Den Serialisierungscode und die Surrogat Klasse) . Es scheint ja so zu sein das deine Surrogat Klasse für den ServiceController nicht verwendet wird. Da kann man nur Vermutungen anstellen das da irgendwas beim Setup der Serialisierung schief läuft. Was genau lässt sich aber nur dem Code entnehmen.

    Comment


    • #3
      Hier der Code der Surrogate Klasse:

      Imports System.Runtime.Serialization
      Imports System
      Imports System.IO
      Imports System.Runtime.Serialization.Formatters
      Imports System.Runtime.Serialization.Formatters.Binary
      Imports System.ServiceProcess

      Friend NotInheritable Class clsSurrogateGroup : Implements ISerializationSurrogate


      Public Sub GetObjectData(obj As Object, info As SerializationInfo, context As StreamingContext) Implements System.Runtime.Serialization.ISerializationSurroga te.GetObjectData
      Dim i As Integer = 0
      Dim oSg As ServiceGroup = CType(obj, ServiceGroup)
      info.AddValue("name", oSg.Profilename)

      For Each sv As ServiceController In oSg.GetServices

      info.AddValue("service" + CType(i, String), sv.ToString())
      i += 1
      Next
      End Sub

      Public Function SetObjectData(obj As Object, info As SerializationInfo, context As StreamingContext, selector As System.Runtime.Serialization.ISurrogateSelector) As Object Implements System.Runtime.Serialization.ISerializationSurroga te.SetObjectData
      Dim oGroup As New List(Of ServiceController)

      Dim oSg As ServiceGroup = CType(obj, ServiceGroup)
      oSg.Profilename = info.GetString("name")
      oSg.SetServices(info.GetValue("services", obj))
      Return Nothing
      End Function
      End Class

      Hier die Klasse der Serialisierung:

      Imports System.IO
      Imports System.Runtime.Serialization.Formatters.Binary

      Public NotInheritable Class ProfileController

      Public Sub SerializeGroups(poObject As ServiceGroup)
      Dim formatter As IFormatter = New BinaryFormatter()

      Dim fs As FileStream = New FileStream("D:\Datenbankmover\Servicemanager\" + _
      poObject.Profilename + ".dat", FileMode.Create)

      'Using stream As Stream = New MemoryStream()
      Dim ss As New SurrogateSelector()

      ss.AddSurrogate(GetType(ServiceGroup), New StreamingContext(StreamingContextStates.All), New clsSurrogateGroup())
      formatter.SurrogateSelector = ss

      Try
      formatter.Serialize(fs, poObject)
      Catch e As Exception
      MsgBox("Fehler beim Serialisieren")
      Throw
      End Try
      fs.Close()
      'Stream.Position = 0
      'End Using
      End Sub

      Public Function DeSerializeGroups()
      Dim aListofGroups As New List(Of ServiceGroup)
      Dim clsSurr As New clsSurrogateGroup

      Dim f As New DirectoryInfo("D:\Datenbankmover\Servicemanager\")

      For Each fi As FileInfo In f.GetFiles("*.dat")

      Dim fs As FileStream = New FileStream(fi.FullName, FileMode.Open)

      Try
      Dim oSg As ServiceGroup = CType(Formatter.Deserialize(fs), ServiceGroup)
      aListofGroups.Add(oSg)
      Catch e As Exception
      MsgBox("Deserialization failed")
      Throw
      End Try

      Next



      Return aListofGroups
      End Function

      End Class


      Info:
      Ich versuche gerade den Controller in einen String zu verwandeln un danach wieder zurück

      Comment


      • #4
        Bitte in lesbar formatieren. Siehe dazu hier

        Comment

        Working...
        X