AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programm extern ausführen

Ein Thema von Ari · begonnen am 7. Jan 2007 · letzter Beitrag vom 18. Jan 2007
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#21

Re: Programm extern ausführen

  Alt 7. Jan 2007, 18:38
ja ich wusste ja bisher nicht genau was du vorhast, jetzt wo du den screener gepostet hast kann ich dir schon mal sagen das "model" in dieser art dadrinne schon mal blödsinn ist, denn das prog erkennt diesen parameter so nicht, versuchs einfach mal ohne also so:


"scip.exe xy.mod" dann kannst ja noch mal schreiben..
Martin
  Mit Zitat antworten Zitat
Ari

Registriert seit: 7. Jan 2007
Ort: Wilhelmshaven
37 Beiträge
 
#22

Re: Programm extern ausführen

  Alt 7. Jan 2007, 18:44
Funktioniert leider auch nicht. Habe außerdem leider auch die Befehle von AMPL und SCIP durchnander gebracht Kann die ja zum Glück leicht ändern..im Anhang jetzt der Versuch mit
scip.exe "read prog.zpl"

Also mit diesen Eingaben funktionierts leider nicht. Gebe ich aber zuerst scip.exe ein, lande ich im "SCIP>" und dann funktioniert "read prog.zpl"...

Ohne das "read" bzw. "model"/wie auch immer wird auch wieder angezeigt "invalid parameter <prog.zpl>"
Miniaturansicht angehängter Grafiken
scip3_173.jpg  
Ariane
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#23

Re: Programm extern ausführen

  Alt 7. Jan 2007, 18:49
Ist klar weil das programm nur die angegeben Parameter unterstützt, Die wären etwa -c -b -l
weder "read" noch "model" wird das Programm nie erkennen.
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Ari

Registriert seit: 7. Jan 2007
Ort: Wilhelmshaven
37 Beiträge
 
#24

Re: Programm extern ausführen

  Alt 7. Jan 2007, 19:38
Oh mist

Mit
WinExecAndWait_32('scip.exe -c "read sudoku.zpl opt disp sol"', 1, False); funktionierts jetzt...

Vielen Dank an euch beide!! Hab mich ja selten doof angestellt xD

Jetzt bleibt nur noch aus, wie ich die Zeilen, die das Programm ausgibt (die Lösungen) in Delphi einlese..soll ich dazu einen extra Thread erstellen?
Könntet ihr mir da bitte auch noch helfen?
Ariane
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#25

Re: Programm extern ausführen

  Alt 7. Jan 2007, 20:42
TDosCommand, CaptureCmd
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Ari

Registriert seit: 7. Jan 2007
Ort: Wilhelmshaven
37 Beiträge
 
#26

Re: Programm extern ausführen

  Alt 8. Jan 2007, 00:16
Hab jetzt versucht, TDoscommand.pas zu installieren, da wird aber dann angezeigt
"Could not create '(mein Verzeichnispfad von Delphi)\projects\bpl\dclusr70.bpl'"
Wobei meine bpl Dateien glaub ich alle in (Delphi-Pfad)\Bin liegen..
Daraufhin hab ich ein neues Package erstellt und absolutes Chaos angerichtet..
Hab immerhin gute zwei Stunden gebraucht, um den angerichteten Schaden wieder zu reparieren bzw. herauszufinden wie ich auch wieder Dateien kompilieren kann

Kann mir jemand bitte helfen? Ich krieg das nicht auf die Reihe :-/
Ariane
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#27

Re: Programm extern ausführen

  Alt 8. Jan 2007, 04:58
Morgen

Ich glaub Du hast Dein Delphi leicht verbogen. Versuch mal reparieren von Setup.

Delphi-Quellcode:
function GetConsoleOutput(const Command: String; var Output, Errors: TStringList): Boolean;
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
  SecurityAttr: TSecurityAttributes;
  PipeOutputRead: THandle;
  PipeOutputWrite: THandle;
  PipeErrorsRead: THandle;
  PipeErrorsWrite: THandle;
  Succeed: Boolean;
  Buffer: array [0..255] of Char;
  NumberOfBytesRead: DWORD;
  Stream: TMemoryStream;
begin
  //Initialisierung ProcessInfo
  FillChar(ProcessInfo, SizeOf(TProcessInformation), 0);

  //Initialisierung SecurityAttr
  FillChar(SecurityAttr, SizeOf(TSecurityAttributes), 0);
  SecurityAttr.nLength := SizeOf(SecurityAttr);
  SecurityAttr.bInheritHandle := true;
  SecurityAttr.lpSecurityDescriptor := nil;

  //Pipes erzeugen
  CreatePipe(PipeOutputRead, PipeOutputWrite, @SecurityAttr, 0);
  CreatePipe(PipeErrorsRead, PipeErrorsWrite, @SecurityAttr, 0);

  //Initialisierung StartupInfo
  FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
  StartupInfo.cb:=SizeOf(StartupInfo);
  StartupInfo.hStdInput := 0;
  StartupInfo.hStdOutput := PipeOutputWrite;
  StartupInfo.hStdError := PipeErrorsWrite;
  StartupInfo.wShowWindow := sw_Hide;
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;

  if CreateProcess(nil, PChar(command), nil, nil, true,
  CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil,
  StartupInfo, ProcessInfo) then begin
    result:=true;
    //Write-Pipes schließen
    CloseHandle(PipeOutputWrite);
    CloseHandle(PipeErrorsWrite);

    //Ausgabe Read-Pipe auslesen
    Stream := TMemoryStream.Create;
    try
      while true do begin
        succeed := ReadFile(PipeOutputRead, Buffer, 255, NumberOfBytesRead, nil);
        if not succeed then break;
        Stream.Write(Buffer, NumberOfBytesRead);
      end;
      Stream.Position := 0;
      Output.LoadFromStream(Stream);
    finally
      Stream.Free;
    end;
    CloseHandle(PipeOutputRead);

    //Fehler Read-Pipe auslesen
    Stream := TMemoryStream.Create;
    try
      while true do begin
        succeed := ReadFile(PipeErrorsRead, Buffer, 255, NumberOfBytesRead, nil);
        if not succeed then break;
        Stream.Write(Buffer, NumberOfBytesRead);
      end;
      Stream.Position := 0;
      Errors.LoadFromStream(Stream);
    finally
      Stream.Free;
    end;
    CloseHandle(PipeErrorsRead);

    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    CloseHandle(ProcessInfo.hProcess);
  end
  else begin
    result:=false;
    CloseHandle(PipeOutputRead);
    CloseHandle(PipeOutputWrite);
    CloseHandle(PipeErrorsRead);
    CloseHandle(PipeErrorsWrite);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  output, errors: TStringList;
begin
   output:=TStringList.Create;
   try
   errors:=TStringList.Create;
   if GetConsoleOutput('cmd /K '+Edit1.Text, output, errors) then
   Memo1.Lines.AddStrings(output);
   finally
   output.free;
   errors.free;
   end;

end;
Edit1.Text -> Ist Dein Command! 'Cmd /k' musst du lassen. das sich die Console sonst nicht wiederbeendet. Schau in die Hilfe wegen dem Command (Cmd /?)
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Ari

Registriert seit: 7. Jan 2007
Ort: Wilhelmshaven
37 Beiträge
 
#28

Re: Programm extern ausführen

  Alt 8. Jan 2007, 18:34
Danke für die Antwort!!

Mittlerweile scheint Delphi wieder zu funktionieren, hab einfach mal reparieren lassen und meine "environment" paths zurückgesetzt, immerhin hab ich jetzt keinen fehler mit "can't find system.pas" mehr.

Delphi startet das Programm ohne Fehlermeldungen. Führe ich aber den Prozess aus (klicke also auf den Button), läuft das Programm - spuckt aber nichts aus und stürzt ab (habs auch mal mehrere Minuten laufen lassen, hat nichts gebracht). Ist es außerdem möglich, statt in ein Memo-Feld eine Zeile bzw. einen Teil einer Zeile in ein Label einzulesen?
An dem Programm kann es eigentlich auch nicht liegen, hab ein paar Befehle gekürzt, damit das SCIP-Fenster nicht zu viele Zeilen hat, bewirkte aber auch nichts. Woran kann das jetzt liegen?

edit: hab die anderen Ausführ-Befehle wie WinExecute und so gelöscht und Edit1.Text durch 'scip.exe "r prog.zpl opt disp sol"', also meine Befehle ersetzt - richtig? Hab auch WinExecute nochmal vorher ausführen lassen aber dasselbe Ergebnis.
Ariane
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#29

Re: Programm extern ausführen

  Alt 8. Jan 2007, 19:32
du könntest so eine zeile aus einem memo in ein label einlesen:
label1.Caption := memo1.Lines.Strings[4]; wobei die 4 die zeile im memo ist, die du auslesen möchtest...
Martin
  Mit Zitat antworten Zitat
Ari

Registriert seit: 7. Jan 2007
Ort: Wilhelmshaven
37 Beiträge
 
#30

Re: Programm extern ausführen

  Alt 8. Jan 2007, 23:17
Oh man...mein Fehler war, dass ich für SCIP nicht den Befehl "quit" eingegeben habe -.-

Hmm jetzt verbleibt zuletzt (dann hör ich auch auf zu nerven ), dass ich nur einen Teil der Zeile einlese, da meine Zeilen so aussehen:
x#1#1#5
und ich will nur die 5 einlesen lassen und in das label bringen. Geht das?
Ariane
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz