Hallo,
in der Regel versuche ich ja, meine Fragen bezüglich eines Problems immer mit Hilfe der Suchfunktion oder Google zu lösen, allerdings konnte ich für mein aktuelles Problem keine Antwort finden. Bevor ich zur eigentlichen Frage komme, hier die Ausgangssituation:
Ich verwende für meine Mediensammlung die Programme von Collectorz.com. Dabei ist es möglich, für diverse Eigenschaften Bilder bzw. Symbole zu verwenden, wie z.B. Logos von Herstellern und Studios. Die lokale Datenbank wird in der Regel in einem Unterverzeichnis der eigenen Dateien gespeichert und die Images wiederum in einem weiteren Unterverzeichnis Images desselben.
Nun hätte ich meine Daten gerne z.B. meiner Schwester oder meinem Bruder zur Verfügung gestellt, damit sie unter anderem für Videoabende einen Film aussuchen oder Interesse für ein mögliches Geburtstagsgeschenk bekunden können oder ähnliche Dinge. Natürlich wohnen wir nicht zusammen, nicht einmal in der gleichen Stadt, denn dann wäre das überflüssig.
Da der Pfad zu den entsprechenden Symbolen dabei fest in der Datenbank hinterlegt wird, können diese bei einer Weitergabe der Datenbank natürlich dort nicht gefunden werden, es sei denn, ein Nutzer mit Administratorkonto legt die gleichen Verzeichnisse auf dem Zielsystem an.
Ich hatte bereits mal ein kleines Programm geschrieben, welches mir die Sicherung/Wiederherstellung aller Einstellungen (Registry) und der einzelnen Datenbanken ermöglicht und wollte dies nun dahingehend erweitern, dass ausgewählt werden kann, in welchem Verzeichnis die Daten gespeichert werden. Diese Einstellung wird dann über die Registry für das Archivierungssystem geändert (ist auch manuell im Programm möglich, allerdings müssten dann mehrere Einstellungen angepasst werden). Zusätzlich soll die Möglichkeit bestehen, in ausgewählten Verzeichnissen einen Symlink auf das Verzeichnis mit den Symbolen/Bildern zu erstellen, z.B. in dem Ordner für gemeinsame Dokumente. Dann könnte man die Symbole immer über dieses "Verzeichnis" referenzieren, so dass der hinterlegte Pfad in der Datenbank ebenfalls immer gleich ist und die Symbole/Bilder überall gleich angezeigt werden.
Das könnte ich natürlich auch erreichen, wenn ich die Bilder generell in einem öffentlichen Verzeichnis ablege, allerdings hätte ich gerne eine Wahlmöglichkeit, so dass jeder Nutzer selbst entscheiden kann und dennoch im Fall des Falles die zugewiesenen Symbole im Programm angezeigt bekommt.
Nun zum eigentlichen Problem. In meinem kleinen Programm kann man über einen Button einen Dialog zur Verzeichnisauswahl aufrufen, über welchen man das Verzeichnis angeben kann, in dem ein Symlink auf die Daten erstellt werden soll. Dabei würde ich gern unterbinden, das Verzeichnisse gewählt werden, die bereits Symlinks darstellen, da es sonst passieren kann, dass man einen Symlink auf einen Symlink auf einen Symlink ... erhält und somit eine ewig lange Pfadtiefe. Man soll in dem Fall dann lieber direkt das ursprüngliche Verzeichnis als Ziel des Symlinks angeben. Es wäre so auch möglich, das man das Verzeichnis mit den eigentlichen Daten wählt und über den entsprechenden Symlink würde sich dann dieses immer wieder selbst referenzieren.
Ich verwende selbst ein NAS-Gerät, um von allen Rechnern in meinem Heimnetzwerk auf die gleichen Daten zugreifen zu können, so auch auf die Datenbanken dieser Programme und im Augenblick funktioniert die Überprüfung über das Attribut faSymlink, sofern es sich um Junction Points handelt, d.h. diese können bei der Wahl ignoriert bzw. ausgeschlossen werden. Handelt es sich aber um einen Symlink, egal, ob dieser auf ein lokales Verzeichnis oder auf ein Netzlaufwerk (SMB-Share) verweist, funktioniert dies eben nicht, denn dann ist das Attribut faSymlink nicht zutreffend und man erhält als Ergebnis den
UNC-Pfad oder das Verzeichnis, auf das der Symlink verweist.
Gibt es irgendeine Möglichkeit, sei es über eine Komponente oder eine Funktion, zu überprüfen, ob es sich auch in letzterem Fall um eine Verknüpfung handelt? Dabei müsste ja auch unterschieden werden können, ob man direkt das Verzeichnis gewählt hat oder eben einen Symlink darauf. Andere Programme, wie das Tool "Link Shell Extension" können ja auch irgendwie zwischen den einzelnen Varianten unterscheiden. Komisch ist zudem, dass das Attribut faSymlink zwar bei einer Junction zutreffend ist, allerdings nicht bei einem tatsächlichen Symlink.
Ich hoffe, irgendjemand hat da eventuell eine schlaue Idee, denn ich habe leider momentan keine.
Besten Dank im voraus
Gruß
Mirko