Seite 1 von 1

RunProgram() #PB_Program_Wait wartet nicht

Verfasst: 20.06.2013 03:31
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

Re: RunProgram() #PB_Program_Wait wartet nicht

Verfasst: 20.06.2013 13:32
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.

Re: RunProgram() #PB_Program_Wait wartet nicht

Verfasst: 20.06.2013 14:10
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 -.-

Re: RunProgram() #PB_Program_Wait wartet nicht

Verfasst: 21.06.2013 06:18
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.

Re: RunProgram() #PB_Program_Wait wartet nicht

Verfasst: 21.06.2013 11:56
von NicTheQuick
Kannst du ein funktionierendes Beispiel für mich machen? Alles zusammen in einem TAR oder so?

Re: RunProgram() #PB_Program_Wait wartet nicht

Verfasst: 21.06.2013 21:13
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