shellexcute + bat dosyası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

shellexcute + bat dosyası

Mesaj gönderen a_o »

mrb arkadaşlar.
elimde bir bat dosyası var ve bu dosyanın içindede dosya sıkıştırma kodları var. şimdi o bat dosyasının içindekileri çalıştırmam gerekiyor. shellexecute ile çalıştırabiliyorum. ama onunla çalıştırınca ekrana commandcom penceresi de geliyo. müşteri ise onun gelmesini istemiyo. ekranda hiç bişey çıkmadan herşey arka planda olsun bitsin istiyo. bunu nasıl yapabilirim?

bat dosyamdaki kodlar

Kod: Tümünü seç

@echo off
net stop mssqlserver
arj32 a -r C:\YEDEK\%1 d:\eta_AA\*.*
NET START MSSQLSERVER
ARJ32 a -ru c:\yedek\%1 C:\ae\BELGELERIM\*.*
bu dosyayı çalıştırdıktan sonra C nin altında yedek die bi klasörün içine D nin içindeki eta_AA dosyasını ve belgelerimi rarlayıp koyuyor. ama dediğim gibi ekrana command com çıkıyor.
shellexecute lü olarak yazdığım kodum:

Kod: Tümünü seç

ShellExecute(0, 'open', pchar('a.bat'), nil, nil, SW_MAXIMIZE);
SW_MINIMIZE desem altta çıkıyo. bense hiç görünmesini istemiyorum.
bunu nasıl yapabilirim_?
sadece arj yle başlayan satırları çalıştırabilirmiyim_ ? kod gibi?
bu konuda yardımcı olabilirmisiniz_?
ii çalışmalar
kolay gelsin
KarizMan
Üye
Mesajlar: 60
Kayıt: 31 May 2005 09:13

Mesaj gönderen KarizMan »

S.A.
SW_Hide olarak denerseniz olur.
İyi çalışmalar
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

ama o zamanda sıkıştırma işleminin ne zaman biteceği belli olmuyo. müşteri direk kapatırsa programı sıkıştırma yarıda kalcak. sıkıştırmanın bittiğini bi şekilde müşteriye belirtmem lazım. onu nasıl yapabilirim. cmd görünürken bittiğini anlıyoduk ama cmd gizlenince o da kayboluyo. ne zaman bittiğini anlayamıyorum. bunu nasıl düzeltebilirim?
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhabalar ,

Kod: Tümünü seç

USES ShellApi;

function ExecAndWait(const Filename, Params: string;
  WindowState: word): boolean;
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  CmdLine := '"' + Filename + '"' + Params;
  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do
  begin
    cb := SizeOf(SUInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WindowState;
  end;

  Result := CreateProcess(nil, PChar(CmdLine), nil, nil, FALSE,
                          CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                          PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);
  if Result then
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
end;


Fonksiyonunu Declare Edin,
Kullanırken ,

Kod: Tümünü seç

if ExecAndWait('c:\batdosyasi.bat','',SW_Hide) then
ShowMessage('İşlem Tamamlandı') else ShowMessage('İşlem Tamamlanamadı..!!')
Bu fonksiyon , çalıştırdığınız program kapanan kadar bekler sonra code blokları kaldığı yerden devam eder,
iyi çalışamalar.
Volkan KAMADAN
www.polisoft.com.tr
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

merhaba
çok tşk ederim.dediğiniz gibi olunca çalıştı sorunsuzca :lol: :lol:
kolay gelsin.
ii çalışmalar.
Cevapla