...hüstel

Musste leider feststellen, dass das Ganze lokal wunderbar geht, aber bei Citrix-Notes versucht er auf die Registry des Servers zuzugreifen. Das ist zum einen nicht möglich, da der Zugriff gesperrt ist, zum andern würde das aber auch nichts bringen, weil die Dateien ja lokal bei den Usern liegen.
Was nun hab ich mir gedacht. Es muss doch möglich sein, vom Server aus auf die Registry des Users zuzugreifen.
Also habe ich mir eine Funktion gebastelt, die eine .reg Datei erstellt. Mein Code sieht jetzt wie folgt aus:
| Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant) |
| '********************************************************************************************************************** |
| 'Hier wird der Start des Dateianhangs ausgeführt, indem der Anhang auf der Platte gespeichert und mittels |
| 'WScript aufgerufen wird. Gleichzeitig wird durch die API RemoveFileEx (Abwandlung MoveFileEx) ein Eintrag |
| 'in der Registry erzeugt, der dafür sorgt, dass die auf Platte kopierte Datei, bei Reboot gelöscht wird. |
| '********************************************************************************************************************** |
| 'Allgemein |
| Dim s As New NotesSession |
| Dim doc As NotesDocument |
| Dim item As NotesRichTextItem |
| Dim obj As NotesEmbeddedObject |
| 'Öffnen und Löschen der Datei |
| Dim WScript As Variant |
| Dim Datei As String |
| Dim Success As Boolean |
| '********************************************************************************************************************** |
| Set doc = source.Document |
| Set item = doc.GetFirstItem("Dateianhang") |
| Set obj = doc.GetAttachment(item.EmbeddedObjects(0).name) |
| Set WScript = CreateObject("Wscript.Shell") |
| |
| Datei = "C:\" & item.EmbeddedObjects(0).name |
| |
| 'kopieren des Anhangs auf Platte |
| Call obj.ExtractFile(Datei) |
| |
| 'Öffnen des Anhangse |
| WScript.Run("""C:\" & item.EmbeddedObjects(0).name & """") |
| |
| 'Registry-Eintrag für das Löschen der Datei bei Neustart des PC's |
| Call RegDateiErstellen(Datei) |
| 'WScript.Run("C:\WINDOWS\system32\regedt32.exe -s C:\Regtest.reg") |
| End Sub |
| Sub RegDateiErstellen(Pfad As String) |
| |
| Dim Dateistream As Integer |
| |
| |
| DateiStream = Freefile() |
| |
| |
| Open "C:\Regtest.reg" For Output Access Write As DateiStream |
| |
| Print #DateiStream,"Windows Registry Editor Version 5.00" |
| Print #DateiStream,Chr(13) |
| Print #DateiStream, "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]" |
| Print #DateiStream,|"PendingFileRenameOperations"=hex(7):| & PfadInHex(Pfad) |
| |
| Close DateiStream |
| End Sub |
| Function PfadInHex (Pfad As String) As String |
| Dim Anzahl As Long |
| |
| |
| |
| PfadInHex = HexZahl("\") & "," |
| PfadInHex = PfadInHex & "00" & "," |
| PfadInHex = PfadInHex & HexZahl("?") & "," |
| PfadInHex = PfadInHex & "00" & "," |
| PfadInHex = PfadInHex & HexZahl("?") & "," |
| PfadInHex = PfadInHex & "00" & "," |
| PfadInHex = PfadInHex & HexZahl("\") & "," |
| PfadInHex = PfadInHex & "00" & "," |
| |
| |
| Anzahl = Len(Pfad) |
| For i = 0 To Anzahl - 1 |
| PfadInHex = PfadInHex & HexZahl(Mid(Pfad,i + 1,1)) & "," & "00" & "," |
| Next |
| |
| |
| PfadInHex = PfadInHex & "00" & "," & "00" & "," & "00" & "," & "00" & "," & "00" & "," & "00" |
| End Function |
| Function HexZahl (Zeichen As String) As String |
| Hexzahl = Hex(Asc(Zeichen)) |
| End Function |
Die .reg wird auch wunderbar erstellt und funktioniert, wenn man sie lokal direkt ausführt. Also habe ich mir gedacht, ich erstelle eine .bat Datei mit folgender Zeile:
C:\Windows\System32\regedt32.exe -s C:\Regtest.reg.
Wenn man diese Datei von Citrix-Notes ausführt, versucht er aber trotzdem auf die Regiytry des Servers zuzugreifen. Obwohl ja explizit das lokale regedit des Users gestartet wird.
Warum wird trotzdem die Registry vom Server angesprochen? Gibt es überhaupt ne Möglichkeit auf die des Users zuzugreifen?
Gruß
Demian
PS: Auf
http://www.enzinger.net/NullStrg.html bin ich auch irgendwann mal gestoßen, konnte das aber leider auch nicht so umsetzen.