Aber egal, was ich versuche, ich bekomme die Ausgabe immer erst, wenn ich den Server beende (CTRL-C in das Serverkonsolenfenster).
Das schräge ist:
Starte ich den Server einmal vorher über Windows Explorer und starte dann mit diesem Code eine zweite Instanz, bekomme ich die Ausgabe direkt?!
Allerdings läuft er dann nicht, weil die Ports natürlich belegt sind.
Die #RUNMODE Konstante war für verschiedene Varianten, mit CMD z.B., aber alles endet im selben Ergebnis.
Irgendwelche Ideen?
Code: Alles auswählen
#Main_Path_To_Game = "{STEAMFOLDER}steamapps\common\Serious Sam 2\"
#Dedicated_Server = "Bin\DedicatedServer.exe"
#RUNMODE = 1 ;1 => set current dir and direct call
Procedure.s GetSteamFolder()
Protected Result.s, hKey, lpcbData, *lpData, lpType, Key.s
If RegOpenKeyEx_(#HKEY_CURRENT_USER, "SOFTWARE\Classes\steam\Shell\Open\Command", 0, #KEY_READ, @hKey) = #ERROR_SUCCESS
If RegQueryValueEx_(hKey, @Key, #Null, #Null, #Null, @lpcbData) = #ERROR_SUCCESS
*lpData = AllocateMemory(lpcbData)
If *lpData
If RegQueryValueEx_(hKey, @Key, 0, @lpType, *lpData, @lpcbData) = #ERROR_SUCCESS
Result = PeekS(*lpData)
EndIf
FreeMemory(*lpData)
EndIf
EndIf
RegCloseKey_(hKey)
EndIf
ProcedureReturn GetPathPart(Result)
EndProcedure
Procedure main()
Protected a$, PID, R, *Buffer, SteamPath$
SteamPath$ = GetSteamFolder()
*Buffer = AllocateMemory($10000)
CompilerSelect #RUNMODE
CompilerCase 1
SetCurrentDirectory(ReplaceString(#Main_Path_To_Game, "{STEAMFOLDER}", SteamPath$))
PID = RunProgram(ReplaceString(#Main_Path_To_Game, "{STEAMFOLDER}", SteamPath$) + #Dedicated_Server, "", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write | #PB_Program_Error)
CompilerCase 2
PID = RunProgram(ReplaceString(#Main_Path_To_Game, "{STEAMFOLDER}", SteamPath$) + #Dedicated_Server, "", ReplaceString(#Main_Path_To_Game, "{STEAMFOLDER}", SteamPath$), #PB_Program_Open | #PB_Program_Read | #PB_Program_Write | #PB_Program_Error)
CompilerCase 3
SetCurrentDirectory(ReplaceString(#Main_Path_To_Game, "{STEAMFOLDER}", SteamPath$))
PID = RunProgram(GetEnvironmentVariable("COMSPEC"), "/c " + #DQUOTE$ + #Dedicated_Server + #DQUOTE$, "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write | #PB_Program_Error)
CompilerCase 4
PID = RunProgram(GetEnvironmentVariable("COMSPEC"), "/c " + #DQUOTE$ + ReplaceString(#Main_Path_To_Game, "{STEAMFOLDER}", SteamPath$) + #Dedicated_Server + #DQUOTE$, "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write | #PB_Program_Error)
CompilerEndSelect
If PID
While ProgramRunning(PID)
R = AvailableProgramOutput(PID)
If R
R = ReadProgramData(PID, *Buffer, R)
Debug PeekS(*Buffer, R, #PB_Ascii)
EndIf
a$ = ReadProgramError(PID)
If a$
Debug "== Error == : " + #CRLF$ + a$
EndIf
Delay(10)
Wend
CloseProgram(PID)
EndIf
FreeMemory(*Buffer)
EndProcedure
main()