Sıralı program çalıştırma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
vbn
Üye
Mesajlar: 6
Kayıt: 01 Oca 2008 02:35

Sıralı program çalıştırma

Mesaj gönderen vbn »

Delphi'de yazmış olduğum program kurulduktan sonra başka bir programın daha kurulmasını istiyorum.. Ancak biri bittikten sonra diğeri başlamalı.. Bunun için Winexec komutunu kullandım ancak o zaman hepsi birden kurulmaya başlıyor.
Programı kurmaya geçmeden önce de if deyimiyle register kayıtlarından programın kurulu olup olmadığını kontrol ettiriyorum. Eğer yoksa kuruluma geçmeli.
Forumda yaptığım aramalar sonucu aşağıdaki kodları buldum. Ancak yine hepsi birden çalışmaya başladı.
function ExecWait(const Cmd: string): Integer;
var
ProcessInfo: TProcessInformation;
hProcess: THandle;
ReturnCode: Integer;
StartupInfo: TStartupInfo;

procedure ChkBool(Value: Boolean; const Msg: string);
begin
if (Value = false) then
raise exception.create(Msg);
end;

begin
FillChar(StartupInfo, SizeOf(StartupInfo), 0);

ChkBool(CreateProcess(nil, PChar(Cmd), nil, nil, False,
CREATE_DEFAULT_ERROR_MODE + NORMAL_PRIORITY_CLASS,
nil, nil, StartupInfo, ProcessInfo),
'Error during CreateProcess');
hProcess := ProcessInfo.hProcess; // save the process handle
//Close the thread handle as soon as it is no longer needed
CloseHandle(ProcessInfo.hThread);
ReturnCode := WaitForSingleObject(hProcess, INFINITE);
ChkBool(dword(ReturnCode) <> WAIT_FAILED, 'Error in WaitForSingleObject');
// The process terminated
ChkBool(GetExitCodeProcess(hProcess, dword(Result)),
'Error in GetExitCodeProcess');
// Close the process handle as soon as it is no longer needed
ChkBool(CloseHandle(hProcess), 'Error in process Close Handle');
end;
Acaba nerde yanlış yapıyorum ya da başka bir yoldan nasıl yapabilirim?
Kullanıcı avatarı
Search
Üye
Mesajlar: 74
Kayıt: 01 Oca 2008 01:03
Konum: Konya

Mesaj gönderen Search »

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; 

Kullanırken

Kod: Tümünü seç

if ExecAndWait('c:\batdosyasi.bat','',SW_Hide) then 
ShowMessage('İşlem Tamamlandı') else ShowMessage('İşlem Tamamlanamadı..!!') 
kolay gelsin...
procedure TForm1.FormCreate(Sender: TObject);
begin
showmessage('Dehanın %1 i ilham %99u terdir.');
end;
end.
Cevapla