RunProgram() #PB_Program_Wait wartet nicht

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

RunProgram() #PB_Program_Wait wartet nicht

Beitrag von Tsuki-Namida »

Hallo,
ich möchte eine Externe Anwendung starten und meine Anwendung soll warten bis die Externe beendet ist...

Mit RunProgramm(Program,Parameter,"",#PB_Program_Wait) wartet meine Anwendung nicht und macht weiter, weshalb es zu fehlern kommt.
Aber auch mit

Code: Alles auswählen

x = RunProgramm(Program,Parameter,"",#PB_Program_Open | #PB_Program_Read)
While ProgramRunning(x)
WaitProgram(x)
Wend 
habe ich das Problem....
Was kann man noch machen damit gewartet wird bis die externe Anwendung geschlossen wurde?

Ich hoffe das mir jemand Helfen kann...

Ach ja Starte ich meine Anwendung vom Benutzerverzeichnis funktioniert es aber es soll auch funktionieren wenn es installiert ist also von /usr/bin/

__________________________________________________
Code-Tags hinzugefügt
20.06.2013
RSBasic
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: RunProgram() #PB_Program_Wait wartet nicht

Beitrag von NicTheQuick »

Welche Anwendung startest du denn konkret?

Bei manchen Programmen wie z.B. Firefox ist es so, dass normalerweise eh nur eine Instanz läuft. Startet man dann eine neue Instanz, sagt diese nur kurz der ersten, dass sie ein neues Fenster oder einen neuen Tab öffnen soll, und dann beendet sich die zweite Instanz auch schon wieder.

Möglicherweise startest du ein Programm, das das ähnlich macht.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Re: RunProgram() #PB_Program_Wait wartet nicht

Beitrag von Tsuki-Namida »

Ich starte den Terminal mit einem Script... also "gnome-terminal -x sh /zur/Script/datei"

Wie geschrieben, starte ich meine Anwendung im Home Verzeichnis wartet sie auf das Ende des Programms aber im System macht meine Anwendung gleich weiter -.-
Bild
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: RunProgram() #PB_Program_Wait wartet nicht

Beitrag von dysti »

Irgendwie war im Forum schon eine ähnliche Frage, auch in Zusammenhang einer Rückgabe.
Kann das aber nicht wieder finden.
Aber die Lösung dieses Problems würde mich auch sehr in­te­r­es­sie­ren.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: RunProgram() #PB_Program_Wait wartet nicht

Beitrag von NicTheQuick »

Kannst du ein funktionierendes Beispiel für mich machen? Alles zusammen in einem TAR oder so?
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Re: RunProgram() #PB_Program_Wait wartet nicht

Beitrag von Tsuki-Namida »

Ok..
Ich habe den Programmausschnitt heraus genommen, und eine Ausgabe für die Konsole mit rein gemacht.

Code: Alles auswählen

If CountProgramParameters()
  For i = 0 To CountProgramParameters() - 1
    Parameter = Val(ProgramParameter(i))
    Console = OpenConsole():PrintN("Verwendeter Parameter: "+Str(Parameter))
  Next
EndIf


If FindString(ProgramFilename(),GetHomeDirectory(),1)
  If Console : PrintN("Diese Anwendung wird im Homeverzeichnis ausgeführt."+Chr(13)+ProgramFilename()):EndIf
  MessageRequester("Home","Diese Anwendung wird im Homeverzeichnis ausgeführt."+Chr(13)+ProgramFilename())
  
Else
  If FindString(ProgramFilename(),"/tmp/",1)
    If Console : PrintN("Diese Anwendung wird im Tempverzeichnis ausgeführt."+Chr(13)+ProgramFilename()):Else
    MessageRequester("Temp","Diese Anwendung wird im Tempverzeichnis ausgeführt."+Chr(13)+ProgramFilename()):EndIf
    
  Else
    If Console : PrintN("Diese Anwendung wird im Systemverzeichnis ausgeführt."+Chr(13)+ProgramFilename()):Else
    MessageRequester("System","Diese Anwendung wird im Systemverzeichnis ausgeführt."+Chr(13)+ProgramFilename()):EndIf
      
  EndIf
EndIf


If OpenWindow(0,0,0,100,100,"Testanwendung",#PB_Window_ScreenCentered)
  ButtonGadget(1,5,5,90,90,"Anwendung"+Chr(13)+"öffnen und"+Chr(13)+"startetn")
  

  Repeat
    Event = WaitWindowEvent()
    If Event
      Select EventGadget()
        Case 1
          
          Program.s = OpenFileRequester("Executable öffnen","/usr/bin/","Executable (*.*)|*.*",0) 
          If Console:PrintN(Program+" ausgewählt"):EndIf
          
          If Parameter = 1
            Anwendung = RunProgram(Program,"","",#PB_Program_Wait)
            If Console:PrintN(Program+" gestartet. Prozessnummer: "+Str(Anwendung)):EndIf
            
          ElseIf Parameter = 2
            Anwendung = RunProgram(Program,"","",#PB_Program_Open | #PB_Program_Read)
            If Console:PrintN(Program+" gestartet. Prozessnummer: "+Str(Anwendung)):EndIf
            
            While ProgramRunning(Anwendung)
              WaitProgram(Anwendung)
              If Console:PrintN("Anwendung ist noch aktiv: "+Str(Anwendung)):EndIf
            Wend
          EndIf
          
          If Console:PrintN("Die Anwendung '"+ GetFilePart(Program)+"' wurde beendet ."):Else
          MessageRequester("","Die Anwendung '"+ GetFilePart(Program)+"' wurde beendet ."):EndIf
      EndSelect
     EndIf
   Until Event = #PB_Event_CloseWindow Or Exit = 1 
   End
 EndIf
 
 
Wie es aus sieht liegt es aber am Terminal... Ich habe diesen Text auch gleich ausprobiert... anfangs habe ich immer den gnome-terminal geöffnet und das Ergebnis war immer das selbe, wie oben beschrieben aber als ich mal eine andere Anwendung nahm zum Beispiel gedit funktionierten beide varianten...

Jetzt stellt sich mir die Frage, wie erfahre ich ob der Terminal fertig ist....

Lg
Bild
Antworten