windows service + shellexcute program çalışmıyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

windows service + shellexcute program çalışmıyor

Mesaj gönderen hdayi »

Merhaba arkadaşlar,

adını verdiğim bir exenin çalışıp çalışmadığını kontrol eden çalışmıyorsa çalıştıran bir windows servisi yazdım.
Bir zamanlayıcı ile kontrol ediyor ve çalıştırması gerekiyorsa

Kod: Tümünü seç

        ShellExecute(0, 'open', pchar('benim.exe'), nil, nil, SW_MAXIMIZE);
ile çalıştırıyor(!!!!)
Ama program çalışmıyor.
Görev yöneticisine baktığım zaman exe görünüyor ama kendisi ortada yok. Yanında kullanıcı olarak SYSTEM görünüyor.

Service'in ServiceStartName ve Password parametrelerini de girdim, hala kullanıcı SYSTEM olarak görünüyor.

Fikri olan var mı?
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

Hatanın nedenini bilemeyeceğim ama farklı fonksiyonlar önerebilirim.
ilk uygulamayı çalıştırıyor ve aktif olana kadar bekliyor. (yüklenmesi uzun süren programlar için işe yarayabilir)

Kod: Tümünü seç

Function WinExecute32Wait(FileName : AnsiString) : integer;
var
 zAppName:array[0..512] of char;
 zCurDir:array[0..255] of char;
 WorkDir:String;
 StartupInfo:TStartupInfo;
 ProcessInfo:TProcessInformation;
 res : DWord;
begin
 StrPCopy(zAppName,FileName);
 GetDir(0,WorkDir);
 StrPCopy(zCurDir, ExtractFilePath(FileName));
 FillChar(StartupInfo, Sizeof(StartupInfo),#0);
 StartupInfo.cb          := Sizeof(StartupInfo);
 StartupInfo.dwFlags     := STARTF_USESHOWWINDOW;
 StartupInfo.wShowWindow := SW_HIDE;           // hide the application window
 // StartupInfo.wShowWindow := SW_SHOW;
 if not CreateProcess(nil,
   zAppName,                      { pointer to command line string }
   nil,                           { pointer to process security attributes}
   nil,                           { pointer to thread security attributes }
   false,                         { handle inheritance flag }
   CREATE_NEW_CONSOLE or          { creation flags }
   NORMAL_PRIORITY_CLASS,
   nil,                           { pointer to new environment block }
   nil,                           { pointer to current directory name }
   StartupInfo,                   { pointer to STARTUPINFO }
   ProcessInfo) then Result := 0  { pointer to PROCESS_INF }
 else begin
   WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
   GetExitCodeProcess(ProcessInfo.hProcess, res);
   result := res;
 end;
end;
İkincisi ise farklı bir yöntem;

Kod: Tümünü seç

 WinExec(pchar('Benim.exe'),0)
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Hocam WinExec kesinlikle yemiyor. Google'da arama yaptım. AYnı soru bi kaç yerde sorulmuş. CreateProcess() önerilmiş. Denedim olmadı ama, bi de senin fonksiyonu deneyeyim.
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Olmadı o fonksiyon da yemedi. :(
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Cevapla