Ein Link zu einer Datei ist ja eigentlich so aufgebaut:
Code:
file://C:\Windows\System32\calc.exe
das sollte eigentlich funktionieren
Und bei einer Freigabe mit Leerzeichen so
Code:
file://Rechner/Freigabe/Langes%20Verzeichnis/Datei
So müsstest du diese Links schon vorbereitet übergeben, denn ein Leerzeichen ist nun mal schwer zu interpretieren, weil nicht eindeutig.
%SystemRoot% ist eigentlich auch kein Problem, da man hier die Environment-Variablen benutzen möchte.
Also entweder alle Environment-Variablen im Text ersetzen lassen
MyText := StringReplace( MyText, '%' + EnvVarName + '%', EnvVarVal, [ rfReplaceAll, rfIgnoreCase ] );
oder eine Funktion schreiben
EnvVarName := StringBetween( MyText, '%', '%' );
und dann mit StringReplace im Text ersetzen.
Variante1 ist aber wesentlich einfacher und weniger fehlerbehaftet umzusetzen (dafür aber mehr Rechenaufwand).
Man könnte diesen Teil aber auch in die Routine auslagern, die den Link aufruft und dann nur dort beim Aufruf ersetzen lassen, denn sonst werden ja auch evtl. Teile ersetzt, die gar nicht ersetzt werden sollen.