...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)
'Dateibezogene Variablen
Dim Dateistream As Integer
'Freie Ddateinnummer suchen
DateiStream = Freefile()
'Datei erstellen
Open "C:\Regtest.reg" For Output Access Write As DateiStream
'Registry-Schlüssel in Datei schreiben
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)
'Erstellte Datei schließen
Close DateiStream
End Sub
Function PfadInHex (Pfad As String) As String
Dim Anzahl As Long
'Der Pfadangabe steht immer \??\ bevor. Jedes Zeichen wird im Schlüssel mit einem Punkt (00) getrennt.
'In der .reg Datei wird jede Hexzahl mit einem Komma getrennt
PfadInHex = HexZahl("\") & ","
PfadInHex = PfadInHex & "00" & ","
PfadInHex = PfadInHex & HexZahl("?") & ","
PfadInHex = PfadInHex & "00" & ","
PfadInHex = PfadInHex & HexZahl("?") & ","
PfadInHex = PfadInHex & "00" & ","
PfadInHex = PfadInHex & HexZahl("\") & ","
PfadInHex = PfadInHex & "00" & ","
'jedes einzelnes Zeichen des Pfades umwandeln
Anzahl = Len(Pfad)
For i = 0 To Anzahl - 1
PfadInHex = PfadInHex & HexZahl(Mid(Pfad,i + 1,1)) & "," & "00" & ","
Next
'Dem letzten . der Pfadangabe stehen immer 6 weitere . nach (durch Komma getrennt)
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.