VB.Net Tobit Mails als EML extrahieren

  • Hallo,

    ich will mir ein Tool bauen das alle Emails eines Archives als EML Datei in einen Ordner ablegt.

    Dafür habe ich als grundlage das Beispiel aus der API hilfe genommen.

    Diese Funktion läuft auch bei mir, nun wollte ich das Programm als Windows Dienst laufen lassen und da bekomme ich immer die Fehlermeldung ganz unten in meinem Beitrag in der geht es um die Funktion DVEmlFromMailItem.

    Hat jemand eine Idee warum die Funktion in meinem Programm super läuft aber in meinem Dienst nicht?


    Der Dienst kann nicht gestartet werden. System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    bei TobitArchiving.TobitEmailArchivierung.DVEmlFromMailItem(Object oMailItem, String& strFileName)
    bei TobitArchiving.TobitEmailArchivierung.MailArchivierung() in O:\VisualStudio\Projekte\TobitArchiving\TobitArchiving\TobitEmailArchivierung.vb:Zeile 78.
    bei TobitArchiving.TobitEmailArchivierung.OnStart(String[] args) in O:\VisualStudio\Projekte\TobitArchiving\TobitArchiving\TobitEmailArchivierung.vb:Zeile 35.
    bei System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

    Einmal editiert, zuletzt von Dorni (2. Mai 2008 um 14:35)

  • Ich vermute jetzt einfach mal, dass das Systemkonto unter dem der Dienst läuft keinen Zugriff auf die Archive hat. Mit einer Fehlerbehandlung bekommst den Fehler ja raus.

  • ich hab das als Systemkonto, Lokales Konto alles ausprobiert und den dienst unter mehreren Benutzerkonten gestartet auch Administrator etc.

    wenn ich den dienst starte und nicht die passenden rechte habe gibt es

    Der Dienst kann nicht gestartet werden. System.Runtime.InteropServices.COMException (0x80004005): DvISE: Insufficient rights to archive
    bei DvApi32.Account.GetArchive(String bstrArchiveName)
    bei TobitArchiving.TobitEmailArchivierung.MailArchivierung() in O:\VisualStudio\Projekte\TobitArchiving\TobitArchiving\TobitEmailArchivierung.vb:Zeile 63.
    bei TobitArchiving.TobitEmailArchivierung.OnStart(String[] args) in O:\VisualStudio\Projekte\TobitArchiving\TobitArchiving\TobitEmailArchivierung.vb:Zeile 35.
    bei System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

    2 Mal editiert, zuletzt von Dorni (2. Mai 2008 um 16:17)

  • Der Fehler wurde verursacht weil in der machine.config unter runtime <legacyNullReferenceExceptionPolicy enabled = "1"/> stand.

    Hier nun die eigentliche FehlerMeldung kann damit jemand was anfangen?

    Der Dienst kann nicht gestartet werden. System.AccessViolationException: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
    bei TobitArchiving.Archivierung.DVEmlFromMailItem(MailItem oMailItem, String& strFileName)
    bei TobitArchiving.Archivierung.MailArchivierung() in O:\VisualStudio\Projekte\TobitArchiving\TobitArchiving\Archivierung.vb:Zeile 64.
    bei TobitArchiving.Archivierung..ctor(IApplication oApp, Account oAccount, String QuellArchiv, String Zielpfad, Int32 _Timer) in O:\VisualStudio\Projekte\TobitArchiving\TobitArchiving\Archivierung.vb:Zeile 29.
    bei TobitArchiving.TobitEmailArchivierung.OnStart(String[] args) in O:\VisualStudio\Projekte\TobitArchiving\TobitArchiving\TobitEmailArchivierung.vb:Zeile 19.
    bei System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

  • Hi,
    mir fallen spontan 2 mögliche fehlerquellen ein:

    1. das benutzerkonto, was den dienst startet hat kein profil. beim zugriff auf das mailitem wird auf das tmp-Verzeichnis des Benutzers zugegriffen, da beim zugriff auf ein mailitem es dord hin kopiert wird. Filename zeigt dann auf die tmp-datei. wenn du von hand ein dokument öffnest findest du es auch dort wieder.

    2. Die var Filename ist nich lang genug (Muss MAXPATH also 260 zeichen umfassen). Dann kann der Pfad nicht aufgelößt werden. wenn du in vb.net programierst nimm keinen string sondern einen Stingbuilder. Ein .net bispiel findest du in der DvAPI Doku.

    Viele grüße

  • Hi NeBo,

    vielen Danke für deine Antwort.

    zu 1. Ich habe es nun mit sämtlichen Benutzern probiert, und alle haben ein Profil auf meinem Rechner.

    zu 2. Ich habe es nun mit einem Stringbuilder versucht gab leider auch keine Veränderung


    ich versteh es einfach nicht, wenn ich die Funktion mit einem normalen Programm aufrufe funktioniert sie einwandfrei nur als Dienst nicht :( ???


    hat jemand noch ideen?

    Einmal editiert, zuletzt von Dorni (6. Mai 2008 um 08:54)

  • Hi,

    versuche es mal ohne speziellen benutzernamen und starte den Dienst mit einem gültigen Benutzerkonto:

    oAccount = oApp.Logon("", "", "", "", "", "NOAUTH")

    Viele Grüße

  • das war es leider auch nicht als erstes hatte ich den server nicht angegeben da kam.

    Der Dienst kann nicht gestartet werden. System.Runtime.InteropServices.COMException (0x80040007): Nicht initialisiertes Objekt (Ausnahme von HRESULT: 0x80040007 (OLE_E_BLANK))
    bei DvApi32.IApplication.Logon(Object server, Object User, Object password, Object profile, Object Dctl, Object cmd)
    bei TobitArchiving.TobitEmailArchivierung.MailArchivierung()
    bei TobitArchiving.TobitEmailArchivierung.OnStart(String[] args) in O:\VisualStudio\Projekte\TobitArchiving\TobitArchiving\TobitEmailArchivierung.vb:Zeile 35.
    bei System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

    Nach dem ich aber den Server angegeben habe: oAccount = oApp.Logon("SASOEX", "", "", "", "", "NOAUTH")

    Bekam ich wieder:

    Der Dienst kann nicht gestartet werden. System.AccessViolationException: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
    bei TobitArchiving.TobitEmailArchivierung.DVEmlFromMailItem(MailItem oMailItem, StringBuilder Filename)
    bei TobitArchiving.TobitEmailArchivierung.MailArchivierung()
    bei TobitArchiving.TobitEmailArchivierung.OnStart(String[] args) in O:\VisualStudio\Projekte\TobitArchiving\TobitArchiving\TobitEmailArchivierung.vb:Zeile 35.

    Was ich grad nur nicht verstehe warum in meinen Fehlermeldungen O:\VisualStudio\Projekte\TobitArchiving\TobitArchiving\TobitEmailArchivierung.vb:Zeile 35. steht. Das ist mein gemappter Ordner auf dem Server wo das Projekt liegt, aber ich erstelle einen Build und führe den auf der Workstation aus aus dem Ordner C:\Tobit und nicht das Netzlaufwerk !?!?

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!