C# System.directory.services bzw Staticklasse? und Winforms

Gast #5331534
Lesenswert?
• ▲
▼
Hallo in die Runde,

ich habe ein Problem, welches mir seit Stunden die Zeit raubt...


Gegeben ist folgende static Klasse
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.DirectoryServices;
6

7
    public static class ADQuery
8
    {
9

10
        public static string GetHomeFolder()
11
        {
12
            string[] PropertiesToLoad = new string[1];
13
            PropertiesToLoad[0] = "homeDirectory"; //homeDirectory beinhaltet den Pfad des P-Laufwerkes
14
            string filter = "(&(objectCategory=user)(objectClass=user)(cn=" + Environment.UserName + "))";
15

16
            try
17
            {
18
                SearchResultCollection results = p_NewQuery(filter, PropertiesToLoad);
19

20
                if (results != null)
21
                {
22
                    foreach (SearchResult result in results)
23
                    {
24
                        DirectoryEntry directoryObject = result.GetDirectoryEntry();
25
                        return directoryObject.Properties["homeDirectory"].Value.ToString();
26
                    }
27
                }
28
            }
29
            catch { }
30

31
            return null;
32
        }
33

34

35
        private static System.DirectoryServices.SearchResultCollection p_NewQuery(string filter, string[] ptoLoad)
36
        {
37
            //Directorysearcher basteln
38
            DirectoryEntry Dentry = new DirectoryEntry("LDAP://xxxxx.DE");
39

40
            DirectorySearcher dSearcher = new DirectorySearcher(Dentry);
41
            dSearcher.Filter = filter;
42
            
43
            foreach(string property in ptoLoad) //Eigenschaften, welche ausgelesen werden sollen laden.
44
            {
45
            dSearcher.PropertiesToLoad.Add(property); 
46
            }
47
            
48

49
            return dSearcher.FindAll();
50
        }
51

52
    }

Und folgender Aufruf (funktioniert nicht)
Nach Klick auf Winform Button
1
void Button1Click(object sender, EventArgs e)
2
    {
3
      char[] driveletter = new char[1];
4
            driveletter[0] = 'P';
5
            
6
            try
7
            {
8
        NetworkDrive.MapFolder(ADQuery.GetHomeFolder(), driveletter);
9
            }
10
            catch(Exception err)
11
            {
12
              MessageBox.Show(err.Message.ToString() +  " Homefolder-> " + ADQuery.GetHomeFolder());
13
            }
14
    }

Hier wird mir die Exception ungültiges Verzeichnis geworfen und 
ADQuery.GethomeFolder() gibt nur einen leeren String zurück.

Rufe ich ADQuery.GethomeFolder() hier auf erhalte ich allerdings den 
Pfad des Homefolders...:
1
public MainForm()
2
    {
3
      InitializeComponent();
4
    }


Was läuft schief, welchen Kontextwechsel verstehe ich nicht?
Gast #5331679
Lesenswert?
• ▲
▼
Also an Winforms liegt es nicht, habe jetzt auf WPF umgestellt und auch 
dort beobachte ich das gleiche Problem.

Wenn ich einmalig wie hier zu sehen ein AD Query mache, läuft das 
Programm danach problemlos...
1
public MainForm()
2
    {
3
      InitializeComponent();
4
      ADQuery.GetHomeFolder();
5
    }

Woran liegt das?
Gast #5332514
Lesenswert?
• ▲
▼
Frank L. schrieb:
> Hallo,
> Dein GetHomeFolder() läuft wahrscheinlich auf das catch und liefert
> folglich nichts zurück.
>
> Gruß
> Frank

Fehler gefunden.

Problem war tatsächlich, dass das Projekt auf dem Laufwerk lag, welches 
ich über das Programm gemapped / unmapped habe.

Habe ich zum Programmstart einen ADQuery abgesetzt, so konnte die 
.exe.config noch gelesen werden und wurde gecached.

Wenn ich zur Laufzeit des Programmes den ADQuery abgesetzt habe, so 
konnte diese Config eben nicht mehr gelesen werden und das Catch in der 
ADQueryKlasse hat mir den Fehler unterdrückt.


Danke für den Hinweis, manchmal steht man echt auf dem Schlauch.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.