Domino 9 und frühere Versionen > ND9: Entwicklung
Per Code den Domino-Temp-Pfad auf R9-Server ermitteln
ERR:
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.
--- Code: ---Declare Function w32_OSGetSystemTempDirectory Lib "nnotes" Alias "OSGetSystemTempDirectory" ( ByVal S As String) As Integer
--- Ende Code ---
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
--- Code: ---NotesNativeAPI.get().OSGetSystemTempDirectory(retPathName, NotesConstants.MAXPATH);
--- Ende Code ---
, weshalb ich das erst gar nicht getestet habe.
MFG
ERR
eknori (retired):
--- Zitat ---9.0.1FP9 HF139
--- Ende Zitat ---
32 oder 64 Bit ?
Wie sieht denn der Code aus, der die API verwendet?
eknori (retired):
Habe es mal mit meinem Code getestet.
--- Code: ---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
--- Ende Code ---
Da kommt in der Tat nichts zurück.
eknori (retired):
OK, habs gefunden
Es gibt die gleiche API auch mit einem anderen Prototypen. ( die benutzen wir auch in domino-jna )
--- Code: ---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
--- Ende Code ---
und der wirft dann
--- Zitat ---[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
--- Ende Zitat ---
byte:
evtl liegt es daran, dass der Dominoserver im Kontext - System läuft und nicht als Benutzer und somit keinen c:\users\... Pfad besitzt ? Auch wäre zu überlegen, ob das System in eurem Environment nicht mittels GPO entsprechend "zugemacht" wurde. ;)
Bin kein Programmierer - dennoch könnte es alternativ u.U. mittels Java zu eruieren sein.
https://stackoverflow.com/questions/19047154/writing-temp-files-on-domino-server-using-java-what-is-the-best-practice-for-th
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln