Autor Thema: Per Code den Domino-Temp-Pfad auf R9-Server ermitteln  (Gelesen 2802 mal)

Offline ERR

  • Frischling
  • *
  • Beiträge: 46
  • Geschlecht: Männlich
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

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);
, weshalb ich das erst gar nicht getestet habe.

MFG
ERR

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Per Code den Domino-Temp-Pfad auf R9-Server ermitteln
« Antwort #1 am: 01.03.18 - 07:30:41 »
Zitat
9.0.1FP9 HF139

32 oder 64 Bit ?

Wie sieht denn der Code aus, der die API verwendet?
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Per Code den Domino-Temp-Pfad auf R9-Server ermitteln
« Antwort #2 am: 01.03.18 - 07:45:26 »
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

Da kommt in der Tat nichts zurück.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
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

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
« Letzte Änderung: 01.03.18 - 08:28:42 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline byte

  • Aktives Mitglied
  • ***
  • Beiträge: 158
  • Geschlecht: Männlich
  • Pillenausgabe geschwänzt ^^
Re: Per Code den Domino-Temp-Pfad auf R9-Server ermitteln
« Antwort #4 am: 01.03.18 - 08:50:26 »
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
egal ist auch wurschd ^^

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Per Code den Domino-Temp-Pfad auf R9-Server ermitteln
« Antwort #5 am: 01.03.18 - 08:55:12 »
Zitat
evtl liegt es daran, dass der Dominoserver
es liegt nicht nur evtl. sondern ausschließlich an der verwendeten API.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline byte

  • Aktives Mitglied
  • ***
  • Beiträge: 158
  • Geschlecht: Männlich
  • Pillenausgabe geschwänzt ^^
Re: Per Code den Domino-Temp-Pfad auf R9-Server ermitteln
« Antwort #6 am: 01.03.18 - 08:57:20 »
na dann ist es ja gebongt ;)

dachte nur,  es war mal 

HKEY_LOCAL_MACHINE";"SOFTWARE\Microsoft\Windows NT\CurrentVersion";"SystemRoot");
TmpDir:=

nun ist es unter

("HKEY_LOCAL_MACHINE"; "SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
 "TEMP");"%");




« Letzte Änderung: 01.03.18 - 09:10:35 von byte »
egal ist auch wurschd ^^

Offline ERR

  • Frischling
  • *
  • Beiträge: 46
  • Geschlecht: Männlich
Re: Per Code den Domino-Temp-Pfad auf R9-Server ermitteln
« Antwort #7 am: 01.03.18 - 11:07:30 »
@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
Code
TempDir = Environ("TEMP")
raus.

MFG
ERR
« Letzte Änderung: 01.03.18 - 11:10:19 von ERR »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz