Hallo,
ich verwende die undokumentierte API-Funktion "OSGetSystemTempDirectory" um den Notes-Temp-Pfad zu ermitteln. Dies funktioniert im 8er- und 9er-Notes-Client ohne Probleme.
Declare Function w32_OSGetSystemTempDirectory Lib "nnotes" Alias "OSGetSystemTempDirectory" ( ByVal S As String) As Integer
Nun habe ich die Funktion auch in einem Agenten auf einem R9-Server (9.0.1FP9 HF139 unter Windows 2012 R2) laufen. Dort bekomme ich nur einen leeren String zurück. Ich bin mir nicht sicher, aber ich glaube unter R8.5.x hatte das mal funktioniert. Mangels 8er Server kann ich dies aber nicht mehr nachvollziehen.
Wie kann ich auf dem Server (oder auch auf dem Client) auf eine andere Art dessen "Temp"-Pfad (nicht den Windows-Temp) ermitteln? Leider habe ich weder in der Notes-Designer-Hilfe noch im Internet eine Möglichkeit gefunden. Was ich gefunden habe: Domino-JNA - dort wird aber anscheinend auch die undokumentierte Funktion verwendet
NotesNativeAPI.get().OSGetSystemTempDirectory(retPathName, NotesConstants.MAXPATH);
, weshalb ich das erst gar nicht getestet habe.
MFG
ERR
Habe es mal mit meinem Code getestet.
Option Public
Option Declare
Declare Function w32_OSGetSystemTempDirectory Lib "nnotes" Alias "OSGetSystemTempDirectory" ( ByVal S As String) As Integer
Declare Function mac_OSGetSystemTempDirectory Lib "NotesLib" Alias "OSGetSystemTempDirectory" ( ByVal S As String) As Integer
Declare Function linux_OSGetSystemTempDirectory Lib "libnotes.so" Alias "OSGetSystemTempDirectory" ( ByVal S As String) As Integer
Const ERR_UNSUPPORTED_PLATFORM = 20300 ' or other value you choose.
Sub Initialize
MsgBox GetNotesTempDirectory
End Sub
Function GetNotesTempDirectory() As String
Dim session As New NotesSession
Dim d As String * 256
Dim s%
Select Case session.Platform
Case "Linux"
s% = linux_OSGetSystemTempDirectory(d)
Case "Macintosh"
s% = mac_OSGetSystemTempDirectory(d)
Case "Windows/32"
s% = w32_OSGetSystemTempDirectory(d)
Case "Windows/64"
s% = w32_OSGetSystemTempDirectory(d)
Case Else
Error ERR_UNSUPPORTED_PLATFORM, "In GetNotesTempDirectory, platform not supported: " & session.Platform
End Select
GetNotesTempDirectory = Left$(d, s%)
End Function
Da kommt in der Tat nichts zurück.
OK, habs gefunden
Es gibt die gleiche API auch mit einem anderen Prototypen. ( die benutzen wir auch in domino-jna )
Option Public
Option Declare
Declare Function w32_OSGetSystemTempDirectory Lib "nnotes" Alias "OSGetSystemTempDirectory" ( ByVal S As String, Byval wBufLen As Integer) As Integer
Declare Function mac_OSGetSystemTempDirectory Lib "NotesLib" Alias "OSGetSystemTempDirectory" ( ByVal S As String, Byval wBufLen As Integer) As Integer
Declare Function linux_OSGetSystemTempDirectory Lib "libnotes.so" Alias "OSGetSystemTempDirectory" ( ByVal S As String, Byval wBufLen As Integer) As Integer
Const ERR_UNSUPPORTED_PLATFORM = 20300 ' or other value you choose.
Sub Initialize
MsgBox GetNotesTempDirectory
End Sub
Function GetNotesTempDirectory() As String
Dim session As New NotesSession
Dim d As String * 256
Dim s%
Select Case session.Platform
Case "Linux"
s% = linux_OSGetSystemTempDirectory(d,255)
Case "Macintosh"
s% = mac_OSGetSystemTempDirectory(d,255)
Case "Windows/32"
s% = w32_OSGetSystemTempDirectory(d,255)
Case "Windows/64"
s% = w32_OSGetSystemTempDirectory(d,255)
Case Else
Error ERR_UNSUPPORTED_PLATFORM, "In GetNotesTempDirectory, platform not supported: " & session.Platform
End Select
GetNotesTempDirectory = Left$(d, s%)
End Function
und der wirft dann
[0284:000B-1874] 03/01/2018 07:52:09 AM AMgr: Start executing agent 'temp' in 'tempdir.nsf'
[0284:000B-1874] 03/01/2018 07:52:09 AM Agent Manager: Agent message: C:\WINDOWS\TEMP\notes6907E3\
[0284:000B-1874] 03/01/2018 07:52:09 AM AMgr: Agent 'temp' in 'tempdir.nsf' completed execution
@eknori
Danke. Das hat nun auf dem R9-Server (64bit) funktioniert und scheint auch (noch) im 8er-Notes-Client zu funktionieren.
Den Parameter in der domino-jna Funktion hatte ich gar nicht gesehen/beachtet...
@byte
Ich brauche das Domino-Temp-Verzeichnis, nicht das von Windows...
Das Windows-Temp-Verzeichnis bekommt man in Lotusscript mit
TempDir = Environ("TEMP")
raus.
MFG
ERR