cmd okuma sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
seci20

cmd okuma sorunu

Mesaj gönderen seci20 »

ustalarım merhaba uzun süredir çözüm aradığım ama bir türlü çözüme ulaştıramadığım bir konu var.Sorunum şu elimde bir kaç tane exe var bunlar console aplication normal şartlarda cmd çalıştırdığımda ekranda sorunsuz şekilde çıktıları alıyorum.Ama bunu kendi projeme aktarmaya çalıştığımda exe işlemi bitene kadar ekrana aktarmıyor.Yani gerçek zamanlı aktarma olmuyor.İnternetteki çoğu foksiyonu denedim ama malasef olmuyor.

Programın bir tanesi şu.

http://spdflashtool.com/wp-content/uplo ... 0.0001.zip

çalıştırıldığında bu şekilde cmdden çıktı alabiliyorum

Resim

ama bunu delphide yapmaya kalktığımda ancak işlem bitip exe kapandığında tüm çıktıyı veriyor.

İnternette denediğim bir kaç foksiyon şunlar

http://delphi.wikia.com/wiki/Capture_Co ... me_To_Memo

http://stackoverflow.com/questions/9119 ... delphi-app

http://thundaxsoftware.blogspot.com.tr/ ... elphi.html


malasefki hiç biri gerçek zamanlı aktarmıyor.Ancak işlem bittikten sonra ekrana yazdırıyor.Yardımlarınız için şimdiden çok teşekkür ederim...
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: cmd okuma sorunu

Mesaj gönderen ertank »

Merhaba,

Daha önce buna benzer bir sorunuzu cevaplamıştım diye hatırlıyorum. Aşağdaki linkteki uygulama işinizi görmedi mi?
viewtopic.php?f=2&t=36022&p=194406&hilit=komut#p194487
seci20

Re: cmd okuma sorunu

Mesaj gönderen seci20 »

ertank yazdı:Merhaba,

Daha önce buna benzer bir sorunuzu cevaplamıştım diye hatırlıyorum. Aşağdaki linkteki uygulama işinizi görmedi mi?
viewtopic.php?f=2&t=36022&p=194406&hilit=komut#p194487
hocam cevap verdiğiniz için çok teşekkür ederim ama oda aynı şekilde diğerleri gibi aktarmıyor aktarmada sorun yaşıyor.
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: cmd okuma sorunu

Mesaj gönderen ertank »

Uygulama anlık olarak DOS komut ekranına gelen bilgiyi gösterir. Uygulama açıldığı zaman Start butonunu tıklayıp komut olarak

Kod: Tümünü seç

dir C:\ /s
yazdığınız ve ENTER tuşuna bastığınız zaman (veya Execute butonunu tıkladığınızda) ekrandan geçen dosya listesini anlık görebilirsiniz.

Eğer kullandığınız uygulama komut satırından çalıştırıldığı zaman anlık olarak ekrana bilgi vermiyor ise zaten o bilgiyi istediğiniz hızda elde edemezsiniz.
seci20

Re: cmd okuma sorunu

Mesaj gönderen seci20 »

ertank yazdı:Uygulama anlık olarak DOS komut ekranına gelen bilgiyi gösterir. Uygulama açıldığı zaman Start butonunu tıklayıp komut olarak

Kod: Tümünü seç

dir C:\ /s
yazdığınız ve ENTER tuşuna bastığınız zaman (veya Execute butonunu tıkladığınızda) ekrandan geçen dosya listesini anlık görebilirsiniz.

Eğer kullandığınız uygulama komut satırından çalıştırıldığı zaman anlık olarak ekrana bilgi vermiyor ise zaten o bilgiyi istediğiniz hızda elde edemezsiniz.
hocam bende öyle düşündüm yanlız cmd ekranına sorunsuz aktarıyor.Yani cmdden programı çalıştırdığımda ekrana sorunsuz şekilde aktariyor delphide çalıştırdığımda delphiye aktarmıyor.
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: cmd okuma sorunu

Mesaj gönderen ertank »

İlgili kodunuzun tamamını paylaşabilir misiniz?
seci20

Re: cmd okuma sorunu

Mesaj gönderen seci20 »

Kod: Tümünü seç

procedure readback(const ACommand, AParameters: String;
  CallBack: TArg<PAnsiChar>);
const
  CReadBuffer = 2400;
var
  saSecurity: TSecurityAttributes;
  hRead: THandle;
  hWrite: THandle;
  suiStartup: TStartupInfo;
  piProcess: TProcessInformation;
  pBuffer: array [0 .. CReadBuffer] of AnsiChar;
  dBuffer: array [0 .. CReadBuffer] of AnsiChar;
  dRead: DWord;
  dRunning: DWord;
  dAvailable: DWord;
begin
  saSecurity.nLength := SizeOf(TSecurityAttributes);
  saSecurity.bInheritHandle := true;
  saSecurity.lpSecurityDescriptor := nil;
  if CreatePipe(hRead, hWrite, @saSecurity, 0) then
    try
      FillChar(suiStartup, SizeOf(TStartupInfo), #0);
      suiStartup.cb := SizeOf(TStartupInfo);
      suiStartup.hStdInput := hRead;
      suiStartup.hStdOutput := hWrite;
      suiStartup.hStdError := hWrite;
      suiStartup.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
      suiStartup.wShowWindow := SW_HIDE;
      if CreateProcess(nil, PChar(ACommand + ' ' + AParameters), @saSecurity,
        @saSecurity, true, NORMAL_PRIORITY_CLASS, nil, nil, suiStartup,
        piProcess) then
        try
          repeat
            dRunning := WaitForSingleObject(piProcess.hProcess, 100);
            PeekNamedPipe(hRead, nil, 0, nil, @dAvailable, nil);
            if (dAvailable > 0) then
              repeat
                dRead := 0;
                ReadFile(hRead, pBuffer[0], CReadBuffer, dRead, nil);
                pBuffer[dRead] := #0;
                OemToCharA(pBuffer, dBuffer);
                CallBack(dBuffer);
              until (dRead < CReadBuffer);
            Application.ProcessMessages;
          until (dRunning <> WAIT_TIMEOUT);
        finally
          CloseHandle(piProcess.hProcess);
          CloseHandle(piProcess.hThread);
        end;
    finally
      CloseHandle(hRead);
      CloseHandle(hWrite);
    end;
end;
procedure progwrmem(const Line: PAnsiChar);
var
  str: string;
  ok:Boolean;
  i,x: integer;
begin
  str := String(Line);
  Form2.memo1.Lines.Add(str);
end;
function flsreadback(Command: string): Boolean;
begin
  Result := true;
  Screen.Cursor:=crHourGlass;
  try
   readback(Command, '', progwrmem);

  finally

    Result := false;

  end;
end;

kodum şu şekilde hocam.Bunun yanı sıra sizin verdiğiniz kodda aynı şekilde ekrana aktarmıyor.Doscommand kompenantını denedım oda aynı sekılde aktarmıyor hocam.
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: cmd okuma sorunu

Mesaj gönderen ertank »

DOS komutu olarak çalıştırdığınız uygulamayı test için paylaşabilir misiniz?
seci20

Re: cmd okuma sorunu

Mesaj gönderen seci20 »

ertank yazdı:DOS komutu olarak çalıştırdığınız uygulamayı test için paylaşabilir misiniz?
buyrun hocam

http://dosya.co/fx064w4z4rhd/SPD_Upgrad ... 1.rar.html

içindeki CmdDloader.exe komutuda şu şekilde verebilirsiniz...

Kod: Tümünü seç

CmdDloader -pac 1.pac -port 5
seci20

Re: cmd okuma sorunu

Mesaj gönderen seci20 »

güncel ustalarım...
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: cmd okuma sorunu

Mesaj gönderen ertank »

Ben kullanmıyorum. Eğer sizde yüklü ise Jedi kütüphanesi ile aşağıdaki gibi bir deneme yapabilir misiniz? TJvCreateProcess bileşenini kullanmanız gerekiyor.

Kod: Tümünü seç

procedure TForm1.ButtonRunClick(Sender: TObject);
begin
  JvCreateProcess1.Run();
end;

procedure TForm1.ButtonTerminateClick(Sender: TObject);
begin
  JvCreateProcess1.Terminate();
end;

procedure TForm1.JvCreateProcess1Read(Sender: TObject; const S: string;
  const StartsOnNewLine: Boolean);
begin
  Memo1.Lines.Add(S);
end;

procedure TForm1.JvCreateProcess1Terminate(Sender: TObject; ExitCode: Cardinal);
begin
  Memo1.Lines.Add('done');
end;
Aşağıdaki parametreleri ayarlamanız gerekli:

Kod: Tümünü seç

    CommandLine = 'C:\Windows\System32\cmd.exe'
    StartupInfo.DefaultSize = False
    ConsoleOptions = [coOwnerData, coRedirect]
    OnTerminate = JvCreateProcess1Terminate
    OnRead = JvCreateProcess1Read
seci20

Re: cmd okuma sorunu

Mesaj gönderen seci20 »

hocam ekledim yaptım aynı şekilde ekrana aktarma yapmıyor.İşlem arkaplanda devam ediyor gene...
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: cmd okuma sorunu

Mesaj gönderen ertank »

Uygulama stdout yerine stderr çıktısı gönderiyor. DOS komut isteminde stdout ve stderr her ikisi de ekrana gösterilir. Uygulama başka bir uygulamayı çağırır iken bu böyle olmaz. Normalde sadece stdout bilgisi okunur.

Aşağıdaki kod sonunda dosya içi boş oluyor.

Kod: Tümünü seç

CmdDloader -pac 1.pac -port 5 > test.txt
Aşağıdaki kod sonrasında dosya içine bilgiler geliyor.

Kod: Tümünü seç

CmdDloader -pac 1.pac -port 5 > test.txt 2>&1
Stderr üzerinden bilgi okuma ile ilgili bir çözüme ulaşırsam burada paylaşırım.
seci20

Re: cmd okuma sorunu

Mesaj gönderen seci20 »

ertank yazdı:Uygulama stdout yerine stderr çıktısı gönderiyor. DOS komut isteminde stdout ve stderr her ikisi de ekrana gösterilir. Uygulama başka bir uygulamayı çağırır iken bu böyle olmaz. Normalde sadece stdout bilgisi okunur.

Aşağıdaki kod sonunda dosya içi boş oluyor.

Kod: Tümünü seç

CmdDloader -pac 1.pac -port 5 > test.txt
Aşağıdaki kod sonrasında dosya içine bilgiler geliyor.

Kod: Tümünü seç

CmdDloader -pac 1.pac -port 5 > test.txt 2>&1
Stderr üzerinden bilgi okuma ile ilgili bir çözüme ulaşırsam burada paylaşırım.
tamam hocam ALLAH razı olsun bekliyorum.
seci20

Re: cmd okuma sorunu

Mesaj gönderen seci20 »

güncel ustalarım...
Cevapla