Forum: PC-Programmierung C# System.directory.services bzw Staticklasse? und Winforms


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von csharper (Gast)


Bewertung
0 lesenswert
nicht 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?

von csharper (Gast)


Bewertung
0 lesenswert
nicht 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?

von Frank L. (Firma: Flk Consulting UG) (flk)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Dein GetHomeFolder() läuft wahrscheinlich auf das catch und liefert 
folglich nichts zurück.

Gruß
Frank

von csharper (Gast)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.