Ich experimentiere zur Zeit mit Reparse Points (einer Art der Symbolischen Verknüpfungen) herum.
Mir geht es dabei darum, das ganze auch auf Systemen unter Vista zu nutzen (ab Vista geht das sehr einfach über die API).
Vor allen Dingen geht es mir erst mal um das Auslesen, welche Datei oder welcher Ordner dort verknüpft ist (das steht schon soweit) - aber im Prinzip auch um das Erstellen und Löschen.
Ich brauche das eigentliche für PureBasic - da die Sache aber nicht gut dokumentiert ist, schreibe ich den Anfangscode in XProfan (da kann ich besser basteln).
Besteht Interesse an einer PCU für sowas oder ist das kalter Kaffeee?
Reparse Points
-
-
-
Dear AHT: Reparse ...? Sind damit die üblichen Links (aka "Verknüpfungen") gemeint oder die sperrenden Hard-Links, wie sie zB. erzeugt werden, wenn man Dateizusammenstellungen auf CD / DVD brennen möchte? Oder geht es um etwas ganz anderes?
Gruss
P.S.: Für alle Fälle: PCU wäre gut (Eine Include wäre noch besser :019: ) -
Softlinks sind gemeint, nicht die LNK Verknüpfungen und auch nicht die Hardlinks.
Die können ab Vista mit dem Kommandozeilenbefehl mklink erstellt werden. -
Delete funzt auch.
-
Create läuft auch.
-
Was ist dabei anders als bei den bekannten Verknüpfungen? Irgendwelche Vorteile?
-
Man kann zum Beispiel einen Ordner mit einem anderen Verknüpfen oder eine sichbare Datei mit einem ADS - versuch das mal mit LNK Dateien.
Ist was komplett anderes - hab aber bei Create noch einen Fehler drin. MountPoints klappt novh nicht. -
Ich suche ja seit langem etwas das es gestatten würde, wissensrelevante Mediendateien gleich nach mehreren Kriterien und Stichwortkategorien im Zugriff zu halten. Beispiel: Auf einen NASA-Bericht via "Raumfahrt", "Technologien", "Marsbesiedelung", "Neue Antriebe" und "Neue SpinOff-Unternehmen" zugreifen können, natürlich auch nach Medienformen getrennt. Mit dem hierarchischem Filesystem von Windows und zahlreichen Softlinks geht das, der Pflegeaufwand ist aber enorm. Ausserdem sollte so ein System Doubletten erkennen und zum Löschen nachfragen, bzw. bei gänzlichem Löschen auch alle Verknüpfungen entfernen.
Gruss
P.S.: Bei so einem System wäre dann z.B. die physische Lagerung völlig flexibel möglich, sogar extern. Nutzen diese neuen Verknüpfungen da was? Hardlinks würden z.B. immerhin das versehentliche Löschen sperren, solange noch irgendwo eine Verknüpfung existiert...
-
So...
Unter XP klappt zwar das Lesen und erstellen - der Explorer kann aber die verknüpfte Datei nicht starten. Das System kann mit den SymLinks nicht umgehen.
Ordnerverknüpfungen klappen auch unter XP wunderbar.Hab erst gedacht, das stellt ein gewaltiges Sicherheitsrisiko dar, Microsoft hat da aber einiges gefixt. Wenn damit nicht mehr zu viel Mist gemacht werden kann, baue ich was. Werde das mal austesten.
-
Bevor ich das hier veröffentliche, werde ich erst mal meinen Scanner updaten.
Eine Sache hat Microsoft da offen gelassen - und die ist sogar noch von Microsoft dokumentiert. -
Ich vermute, es handelt sich um das Windows-Analogon zu Linux-MountingPoints?
-
Ja, genau.
-
Hier Download der PCU: ReparsePoints.pcu
Hier Beispielcode zum Testen:Code
Alles anzeigen$U reparsePoints.pcu = RP. Declare Error% Windowstyle 31 + 512 WindowTitle "Reparse Points" Window 0, 0 - 640, 420 UserMessages $10 Print "ReparsePoints PCU benötigt für volle Funktionalität Adminrechte!" Print "" MKDir "C:\Mein Temporärer Ordner!" Error% = RP.CreateReparsePoint("C:\Mein Temporärer Ordner!", LongName$($TempDir), 1) '1 für Junction (Ordnerverknüpfung) If Error% = 0 Print " C:\Mein Temporärer Ordner! ist nun mit " Print " " + RP.GetReparsepoint("C:\Mein Temporärer Ordner!") + " verknüpft!" Else Print " Junction konnte nicht erstellt verden!" Print " Fehlercode: " + Str$(Error%) endif MKDir "C:\Meine Logs!" Assign #1, "C:\Meine Logs!\Log vom Windowsupdate.txt" Rewrite #1 Close #1 Error% = RP.CreateReparsePoint("C:\Meine Logs!\Log vom Windowsupdate.txt", $WinPath + "\WindowsUpdate.log", 0) '0 für Symbolische Datei- oder Ordnerverknüpfung If Error% = 0 Print " C:\Meine Logs!\Log vom Windowsupdate.txt ist nun mit " Print " " + RP.GetReparsepoint("C:\Meine Logs!\Log vom Windowsupdate.txt") + " verknüpft!" Else Print " Symbolische Dateiverknüpfung konnte nicht erstellt verden!" Print " Fehlercode: " + Str$(Error%) endif Print "" If RP.IsReparsePoint("C:\Programme") Print "C:\Programme ist mit " + RP.GetReparsepoint("C:\Programme") + " verknüpft!" Else Print "Der ordner C:\Programme ist keine Symbolische Verknüpfung!" endif While %Umessage <> $10 waitInput EndWhile Print "" Color 4, 15 Print "Junction C:\Mein Temporärer Ordner! wird gelöst!" Error% = RP.DeleteReparsePoint("C:\Mein Temporärer Ordner!") Sleep 3000 If Error% = 0 Print " Lösung erfolgreich durchgeführt!" else print " Nicht gelöst! Fehlercode: " + Str$(Error%) endif Sleep 3000 Print "" Print "Symbolische Dateiverknüpfung C:\Meine Logs!\Log vom Windowsupdate.txt" Print " wird gelöst!" Error% = RP.DeleteReparsePoint("C:\Meine Logs!\Log vom Windowsupdate.txt") Sleep 3000 If Error% = 0 Print " Lösung erfolgreich durchgeführt!" else print " Nicht gelöst! Fehlercode: " + Str$(Error%) endif Sleep 3000 End
Zur vollen Funktionalität werden Adminrechte benötigt. -
Hier noch einmal die enthaltenen Funktionen:
RP.IsReparsePoint
Ermittelt, ob ein Objekt eine Symbolische Verknüpfung ist.- 1.Parameter: Ordner oder Dateiname
Ergebnis:- 1 wenn das Objekt eine Symbolische Verknüpfung ist.
- 0 wenn das Objekt keine Symbolische Verknüpfung ist.
______________________________________________
RP.DeleteReparsePoint
Löst eine Symbolische Verknüpfung- Parameter 1: Ordner oder Dateiname
Ergebnis:- 0 wenn die Verknüpfung erfolgreich gelöst wurde.
- Andernfalls eine Zahl, die einen Fehlercode angiebt.
______________________________________________
RP.CreateReparsePoint
Macht aus einer leeren Datei oder einem leeren Ordner eine Symbolische Verknüpfung.- Parameter 1: Ordner oder Dateiname des Objektes, das verlinkt weden soll.
- Parameter 2: Ordner oder Dateiname des Objektes, zu dem verlinkt weden soll.
- Parameter 3: 0 für einen Junction Point (Ordnerverknüpfung), 1 für eine Symbolische (Datei-) Verknüpfung.
Ergebnis:- 0 wenn die Verknüpfung erfolgreich erzeugt wurde.
- Andernfalls eine Zahl, die einen Fehlercode angiebt.
______________________________________________
RP.GetReparsePoint
Liest das Ziel einer Symbolischen Verknüpfung aus.- Parameter 1: Ordner oder Dateiname einer Symbolischen Verknüpfung.
Ergebnis:- Der Datei- oder Ordnername des Ziels als Textausdruck.
-
Irgendwie will das bei mir nicht so richtig. Deine EXE auf Win7-64 als Admin ausgeführt, sieht so aus:
[Blockierte Grafik: http://s29.postimg.org/mblo7rd1f/Reparse_EXEFehler01.jpg]Beide Verknüpfungen sind aber da und funktionieren.
Als PRF ausgeführt, sieht das so aus
[Blockierte Grafik: http://s9.postimg.org/5jl92wtez/Reparse_PRFFehler01.jpg]
und WindowsUpdateLog funktioniert nicht.
Wenn ich dann in der PRF das Erstellen überspringe, werden beide Verknüpfungen auch gelöst.Gruß Volkmar
Irgendwie will mir das mit den Bilder nicht gelingen. Bei mir in der Vorschau sind sie da
Nun sind die Bilder hoffentlich da
-
Das ging aber schnell! Danke für Deine Mühe, wird sofort ausprobiert (Hoffe, mit Win7-64bit keine Probleme zu haben).
Gruss -
Volkmar:
Muss mit Adminrechten ausgeführt werden!
Normalerweise läuft der Profan-Editor unter Systemen ab Vista nicht mit Adminrechten.
Deine Bilder gehen leider nicht... -
Ich hoffe, die Bilder sind nun zu sehen. Erster Versuch war ja Deine EXE Rechtsklick als Admin und Passwort.
Gruß Volkmar
-
Ja, geht jetzt. Ich schau mal, was X2 da anders macht als XProfan9.
-
Dann müßte doch aber Deine EXE ohne Probleme laufen, die ist doch Profan9. Die macht mir ja den Fehler im ersten Bild.
Gruß Volkmar
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!