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()

