Datenschreibvorgänge automatisch umleiten

rick00

Cadet 4th Year
Registriert
Jan. 2019
Beiträge
74
Hallo!

Ich würde gerne unter Windows 10 Pro Dateischreibvorgänge automatisch umleiten.

Konkret:
Ein Programm möchte unter "C:\Programme" Daten schreiben. Ich will aber, daß die Daten auf "D:\Programme" landen.
Eine Einstellmöglichkeit beim Programm selbst gibt es nicht.

Mein erster Gedanke wäre die Verwendung von hardlinks gewesen. Diese funktioniern aber leider ja nur, wenn ich die Daten nachträglich per Hand verschiebe und anschließend einen Hardlink einrichte.

Hintergrund:
Ich würde gerne die kostenlose Variante von Chocolatey auch für portable Programme nutzen. Bei dieser Variante ist es aber nicht möglich einen Installationspfad selbst zu wählen. Die Programme werden zwangsweise unter C:\ installiert.
Da ich meine portablen Apps aber auf einer 2ten SSD (D:\) liegen habe, bräuchte ich sowas wie eine automatische Datenumleitung von C:\ auf D:\

Gibt es hier eine praktikable Möglichkeit?

Gruß Rick
 
Hallo wesch2000!

Genau dies wäre auch meine Idee gewesen.
Bei den Beschreibungen von Hardlinks habe ich jedoch den (falschen?) Eindruck bekommen, daß diese nur für die Verwendung von nachträglich verschobenen Daten funktionieren. Vielleicht weil, bei den Bsp. die ich gefunden habe, immer nur dieser Fall gezeigt wurde.
Ich habe den Verdacht, daß Windows intern auch häufig mit Hardlinks arbeitet. So auch bei den persönlichen Daten, welche man ja auch verschieben kann. Programme suchen allerdings immer standardmäßig auf "C:\Benutzer\Benutzername" dannach.

Das müßte ich doch testen können idem ich auf C:\ und auf D:\ einen Ordner namens "Test" anlege einen Hardlink von C:\ nach D\: einrichte und anschließend eine Datei nach "C:\Test" kopiere? Die Datei müßte dann auf "D:\Test" landen.
 
https://docs.chocolatey.org/en-us/choco/setup#install-using-powershell-from-cmd.exe
?
wenn du in der Batch den pfad (set Dir) auf D: legst geht es auch nicht?
(Ansich reicht es schon die Batch auf D: zu legen da selbstreferenzierend)

@echo off
SET DIR=%~dp0%
::download install.ps1
%systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "((new-object net.webclient).DownloadFile('https://chocolatey.org/install.ps1','%DIR%install.ps1'))"
::run installer
%systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "& '%DIR%install.ps1' %*"
Es gibt auf der Seite ja noch zig andere Installationsmöglichkeiten, bei einigen kann man auch sichtbar den Pfad anpassen. z.B. der Offlineinstallation Zeile 47

Ansonsten: mit Powershell o.a. das PS1 Script bearbeiten. spätestens da steckt bestimmt auch ein installpath drin.

also anders gesagt hast du da schonmal reingschaut in die verschiedenen Installmöglichkeiten oder ist das alles nichts für dich? Ich hätte wohl erstmal mit Powershell/CMD herumgespielt bevor ich in Windows Hardlinks setzen würde, weil das sich auch auf andere Programme auswirkt wo man das nicht möchte
 
Zuletzt bearbeitet:
Hallo CyrionX!

Hab bei den FAQs folgendes gelesen:

What distinction does Chocolatey make between an installable and a portable application?

Portable applications end up in the %ChocolateyInstall%/lib (i. e. C:\ProgramData\Chocolatey\lib) folder yes, but they get a "shim" to put them on the path of the machine. This behavior is very much to how Chocolatey works and is not configurable (the directory). Where the portable apps end up is still going to be %ChocolateyInstall%/lib no matter where you move the directory, unless a package itself unpacks the portable app elsewhere (as in the case of git-tfs).

Muß aber zugeben, daß ich den Inhalt nicht komplett verstehe.
"but they get a "shim" to put them on the path of the machine" ??


NOTE: There is one really important consideration when installing Chocolatey to a non-default location: Chocolatey only locks down the permissions to Admins when installed to the default location %PROGRAMDATA%\Chocolatey, which means the same thing as %SystemDrive%\ProgramData\Chocolatey. If you are installing to another location, you will need to handle this yourself, i. e. restrict write access to Admins in case you so desire. This is due to alternative locations could have a range of permissions that should not be changed. See Why does Chocolatey install where it does and https://github.com/chocolatey/choco/issues/398 for more details.


Mit PowerShell hab ich bis jetzt noch gar nichts gemacht und mein Kenntnisse bezüglich CMD sind leider auch sehr begrenzt.
Hab choco per vorgefertigten PowerShell Skript (CopyPaste) installiert und anschleißend die "normalen" Programme per CMD installiert. Anschließend hab ich mir eine einfache Batch-Datei mit "choco upgrade all -y" geschrieben, welche ich 1x pro Woche per Windows Taskplaner ausführe und somit alle installierten Programme update.
Portable Programme nutze ich per PortableApps.com Platform, welche auf D:\ liegen.
Jetzt würde ich gerne die portablen Apps von Choco in den selben Ordner "Installieren" um diese auch per Launcher finden und starten zu können.


Habe gerade gelesen, daß Hardlinks nicht volumeübergreifend funktionieren? Sommit für meine Idee also nicht anwendbar? Hab allerdings immer noch Verständnisprobleme bei den Unterschieden von Hard-, Soft- und Symlinks.

Gruß Rick
 
Zuletzt bearbeitet:
Dann versuchs lieber erst mit dem Link von Wesch2000.
Sieht ja sehr einfach zu handhaben aus , kannte ich auch noch nicht :)

Der Text sagt im Grunde nur aus: mit Portableversionen kannst du den Installpfad nicht anpassen was aus der "portable" funktion selbst resultiert. Mit eben Ausnahme von übergeordneten packages. (z.B. wenn es eine .msi gäbe oder remote-installationen in Domains usw.)

Ich hatte anfangs auch gehofft, dass es eine .msi oder installshield etc. installationsdatei gibt, das hätte man dann ganz einfach anpassen können
 
Zuletzt bearbeitet:
Wenn das Programm nicht läuft, kannst du den Programmordner umbenennen.
Danach auf d: einen Ordner mit dem Programmnamen erstellen und einen link auf c: setzen.
Dann kannst du deine Programmdateien in den Linkordner kopieren.
 
  • Gefällt mir
Reaktionen: areiland
Steh momentan aufn Schlauch...

Aus den FAQ:

Symbolische Links:
......Symbolik bedeutet, dass die Datenobjekte auf jedem verfügbaren Volume liegen können, d. h. sie sind nicht wie Hardlinks auf ein einzelnes Volume beschränkt.

Check das genaue Verhalten und die Unterschiede zw. Hard-, Soft- und Symlink nicht wirklich.
Da Hardlinks nicht volumeübergreifend funktionieren, funktioniert eine Umleitung von C:\ zu D:\ nicht, oder?
Brauch ich da n Symlink?
 
Du brauchst einen Symlink, auch Junction genannt, erstellbar mit mklink /j "Linkname" "Ordner". Hardlinks sind der gleiche Ordner oder die gleiche Datei mit einem zusätzlichen physischen Namen, deshalb geht das nicht über Volumegrenzen hinweg.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: CyrionX und wesch2000
Ist d: eine andere Platte oder nur ein Volume ?
Ergänzung ()

Nimm einfach Junction
 
Zuletzt bearbeitet:
@wesch2000

Habe 2 SSDs + 1HDD:
SSD1 = C:\ (Windows)
SSD2 = D:\ (SSD_Daten)
HDD = E:\ (HDD_Daten)
 
areiland schrieb:
Du brauchst einen Symlink, auch Junction genannt, erstellbar mit mklink /j "Linkname" "Ordner". Hardlinks sind der gleiche Ordner oder die gleiche Datei mit einem zusätzlichen physischen Namen, deshalb geht das nicht über Volumegrenzen hinweg.
Leute die auf dem Kriegsfuß mit der Console stehen können Dirlinker nutzen, das ist eine passende GUI für Symlinks.
 
wesch2000 schrieb:
Wenn das Programm nicht läuft, kannst du den Programmordner umbenennen.
Ich kriege hier ein wenig Bauchweh.

Wenn mir ein einzelnes Programm querschießt - so verstehe ich die Eingangsfrage - dann muss ich lange nicht C:\Programme (= C:\Program Files) umbiegen sondern nur den Ordner darin den besagtes Programm benutzt.

Ist dieser denn bekannt?

HisN schrieb:
Leute die auf dem Kriegsfuß mit der Console stehen
Na, da hat mich das Tool im Link von Wesch2000 aber auch ordentlich erschlagen.

In der Tat, MS nutzt selbst überall hardlinks, aber sie einfach anzubieten gezielt eine Systemapartition zu entlasten, das wäre offenbar zu viel für Normaluser; wie so oft…

CN8
 
Wenn ich den SymLink mit Link Shell Extension erstellen möchte wie muß ich dann vorgehen.
Das Programm hat für den Anfang einafch ein paar Funktionen zu viel.

Bin aktuell noch nicht bei meinem PC, wo ich Choco installiert habe...

1.) Die Daten der portablen Apps von Choco landen lt. FAQ in folgendem Verzeichnis: C:\ProgramData\Chocolatey\lib Wenn der Ordner "lib" schon vorhanden ist, kann dieser direkt ausgewählt werden, ansonsten den Ordner erstellen und per Kontextmenü ---> "Pick Link source" die Link Quelle auswählen

Die portablen Apps von PortableApps.com liegen im Ordner:
E:\PortableApps\PortableAppsPlatform\PortableApps\NameDerApp

2.) Zitat: Junctions werden auf die gleiche Weise wie Hardlinks erstellt, wobei die Quelle ein Ordner und nicht eine Datei ist. Wählen Sie einen Ordner, klicken Sie auf die Aktionstaste, wählen Sie Link Quelle festsetzen aus dem Aktionsmenü (also Pkt. 1), navigieren Sie zum Zielordner, klicken Sie auf die Aktionstaste, öffnen Sie das Untermenü Einfügen als ... und wählen Sie Junction. (drop here --> Junction).

Brauch ich jetzt tatsächlich Junction oder doch Symbolic Link?
Wird dann nicht ein neuer Ordner erstellt und nicht der vorhandene Ordner "PortableApps" als DatenZiel erzeugt bzw. verwendet?
 
cumulonimbus8 schrieb:
Ich kriege hier ein wenig Bauchweh.

Wenn mir ein einzelnes Programm querschießt - so verstehe ich die Eingangsfrage - dann muss ich lange nicht C:\Programme (= C:\Program Files) umbiegen sondern nur den Ordner darin den besagtes Programm benutzt.

Ich wollte nie einen Systemordner umbiegen
 
War mir klar 😉, kann der Laie aber missversthen.

@ Rick00
Zum Beispiel:
• das Programm beenden, und zwar ganz sicher mit allem Drum und dran
• den bewussten [Unter-]Ordner nach D kopieren, von mir aus gerne in ein D:\Programme\ ← braucht man Admin-Rechte für!
• eine CMD-Box mit Ademin-Rechten in C:\Programme (= C:\Program Files) öffnen und…
MKLINK /J /D "Der Programmordner" "D:\Programme\Der Programmordner"
ausführen.
Das sollte es gewesen sein.

CN8
 
@rick00
Junction reicht, die reichen auch jeden Zugriff auf das Ziel durch.
 
Zurück
Oben