Service Application ile Başka Bir Program Çalıştırmak hk.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Service Application ile Başka Bir Program Çalıştırmak hk.

Mesaj gönderen barutali »

Herkese merhabalar;

Yazdığım hizmet uygulamasından başka bir programı örneğin notepad.exe yi çalıştırtmak istiyorum. Yalnız şöyle bir sorun var görev yöneticinde İşlemler sekmesinde programın çalıştığı görünsede uygulama olarak çalışmıyor..

Denediğim bazı yönemler..
Shellexecute
WinEXEC
CreateProcess
admin hesabı ile çalıştırma
yada başka türlü function lar procedure ler 3. parti bileşenler.

aşağıdaki kod parçacığınıda vkamadan hocam dan dün aldım fakat nafile değişiklik olmadı..

Kod: Tümünü seç

function CreateProcessWithLogonW(
  lpUsername,
  lpDomain,
  lpPassword:PWideChar;
  dwLogonFlags:dword;
  lpApplicationName: PWideChar;
  lpCommandLine: PWideChar;
  dwCreationFlags: DWORD;
  lpEnvironment: Pointer;
  lpCurrentDirectory: PWideChar;
  const lpStartupInfo: tSTARTUPINFO;
  var lpProcessInformation: TProcessInformation
  ): BOOL; stdcall; external 'advapi32.dll';

  function RunAsUser(const Filename, Domain, Username, Password: string):
  Boolean;
  var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
  wFilename, wDomain, wUsername, wPassword: PWideChar;
  begin
  FillChar (StartupInfo, SizeOf(StartupInfo), #0);
  StartupInfo.cb := SizeOf(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := SW_SHOWNORMAL;
 
  GetMem(wFilename, Length(Filename) * SizeOf(WideChar) +
  SizeOf(WideChar));
  GetMem(wDomain, Length(Domain) * SizeOf(WideChar) +
  SizeOf(WideChar));
  GetMem(wUsername, length(Username) * SizeOf(WideChar) +
  SizeOf(WideChar));
  GetMem(wPassword, length(Password) * SizeOf(WideChar) +
  SizeOf(WideChar));
 
  StringToWideChar(Filename, wFilename, Length(Filename) *
SizeOf(WideChar)
  + SizeOf(WideChar));
  StringToWideChar(Domain, wDomain, Length(Domain) *
SizeOf(WideChar)
  + SizeOf(WideChar));
  StringToWideChar(Username, wUsername, Length(Username) *
SizeOf(WideChar)
  + SizeOf(WideChar));
  StringToWideChar(Password, wPassword, Length(Password) *
SizeOf(WideChar)
  + SizeOf(WideChar));
 
  Result := CreateProcessWithLogonW(
  wUsername,
  wDomain,
  wPassword,
  0,
  wFilename,
  nil,
  0,
  nil,
  nil,
  StartupInfo,
  ProcessInfo);
 
  if Result then begin
  WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
  CloseHandle(ProcessInfo.hProcess);
  CloseHandle(ProcessInfo.hThread);
  end else
  RaiseLastOSError;
 
  FreeMem(wFilename);
  FreeMem(wDomain);
  FreeMem(wUsername);
  FreeMem(wPassword);
  end;

amatör küme programcı :D
debugMe
Üye
Mesajlar: 5
Kayıt: 20 Nis 2009 07:26

Re: Service Application ile Başka Bir Program Çalıştırmak hk

Mesaj gönderen debugMe »

şöyle ki,

Windows XP ve öncesi ile Windows 7 ve sonrası arasında Servis uygulamaları bakımından bariz farklar mevcut. Artık Servis uygulamaları ve standart uygulamalar farklı oturumlarda çalışıyor.

Win 7:
Resim

Win XP:
Resim

Dolayısıyla servis uygulamaları hazırlarken bu şema göz önüne alınarak aynı oturumda çalışmasına olanak vermek lazım ki msdn de yaptığım araştırmalarda konunun sıkıntılı olduğu yönünde fakat çözüm bulunabilir. Bulursam burada da paylaşacağım, önce bulan olursa bizleri de kurtarabilir :)
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Service Application ile Başka Bir Program Çalıştırmak hk

Mesaj gönderen SimaWB »

Hizmetler'de herhangi bir hizmeti sağ tıklayıp özelliklerine girdiğinizde Oturum Açma kısmında "Hizmetin masaüstü ile etkileşimine izin ver" şeklinde bir seçenek var. Bunu işaretleyip denediniz mi? Belki işe yarar...
There's no place like 127.0.0.1
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Re: Service Application ile Başka Bir Program Çalıştırmak hk

Mesaj gönderen barutali »

@debugme dediğin gibi olayın cacığını çıkartmışlar... Tüm bunlar win7 de görev yöneticisinden programı gizleyemediğim için başıma geldi :D

@simawb dediğiniz gibi denedim. Servisi yerel hesap yerine elle admin hesabını seçerekte denedim fakat bir şey değişmiyor.

Programı İşlem olarak çalıştırıyor fakat arayüz ekrana gelmiyor..
amatör küme programcı :D
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Service Application ile Başka Bir Program Çalıştırmak hk

Mesaj gönderen vkamadan »

Merhaba ,
http://www.delphigroups.info/2/11/213970.html burayı incelermisiniz servis uygulaması içinden farklı bir uygulama çalıştırma üzerine konuşmuşlar.

Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
barutali
Üye
Mesajlar: 297
Kayıt: 02 Tem 2007 02:30

Re: Service Application ile Başka Bir Program Çalıştırmak hk

Mesaj gönderen barutali »

Kemal BAYAT (lazymule@gmail.com) ' ın mükemmel araştırma özelliği sayesinde çözülmüştür.
JEDI Api kullanılmıştır.. Dosyayı aşağıdaki linkten indirebilirsiniz..

Kemal BAYAT' a teşekkürler..


http://www.barutali.net/ServiceWin7.rar
amatör küme programcı :D
Kullanıcı avatarı
lazymule
Üye
Mesajlar: 127
Kayıt: 16 Eki 2006 04:03
İletişim:

Re: Service Application ile Başka Bir Program Çalıştırmak hk

Mesaj gönderen lazymule »

Teşekkürler Alim güle güle kullan.
Evrende Ulaşılamayacak Tepe Yoktur !!!!
Yeterki İnsan Ulaşmak İstesin !!!!
http://www.maxiteknik.com
apex06
Üye
Mesajlar: 58
Kayıt: 19 Nis 2012 12:21

Re: Service Application ile Başka Bir Program Çalıştırmak hk

Mesaj gönderen apex06 »

Re: Service Application ile Başka Bir Program Çalıştırmak hk

Kemal BAYAT (lazymule@gmail.com) ' ın mükemmel araştırma özelliği sayesinde çözülmüştür.
JEDI Api kullanılmıştır.. Dosyayı aşağıdaki linkten indirebilirsiniz..

Kemal BAYAT' a teşekkürler..

http://www.barutali.net/ServiceWin7.rar

barutali merhaba, dosyayı tekrar paylaşmanız mümkün mü acaba?

Teşekkürler..
Delhici
Üye
Mesajlar: 176
Kayıt: 20 Eyl 2003 09:04

Re: Service Application ile Başka Bir Program Çalıştırmak hk

Mesaj gönderen Delhici »

Bu kadar kasmaya gerek yok bu konuyu.. service application özelliklerinden interacive yi true yapın. o zaman tam etkileşimli çalışacaktır.

Kolay Gelsin.
http://www.bargem.info
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
yusuf simsek
Üye
Mesajlar: 330
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: Service Application ile Başka Bir Program Çalıştırmak hk

Mesaj gönderen yusuf simsek »

Ekten kaynak kodları indirin.
Klasör içinde bulunan "JEDI API 2.3 and JEDI WSCL 0.9.3.zip" dosyasını da klasöre çıkartın.
Delphi de Library path e "JEDI API 2.3 and JEDI WSCL 0.9.3\jwa\branches\2.3\Win32API" Yolunu ekleyin..
Projenin kaynak kodunu delphi de açın ve derleyin..
Servici Windows a yüklemek için Başlat -> Çalıştır ı açın.
<EXEADI.exe> / insall yazın enter a basın.
Bilgisayarıma sağ tıklayın Yönet ekranını açın.
Hizmetlere girin Hizmetlerde Servici başlatın.


Delphi 2010 ile yeniden düzenledim.

indirme linki :

http://www.mediafire.com/download.php?dsb76sh882tldem
Burada ki link kırık... @Barutali Farklı bir formda kullanım şekliyle beraber dosyayı tekrar upload etmiş.

Ellerine sağlık @Barutali
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com
yusuf simsek
Üye
Mesajlar: 330
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: Service Application ile Başka Bir Program Çalıştırmak hk

Mesaj gönderen yusuf simsek »

Kod: Tümünü seç

procedure RunExec(const AProgramName: string );
var
  hToken: THandle;
  StartupInfo: TStartupInfo;   
  ProcessInfo: TProcessInformation;
  res: boolean;
begin

  GetStartupInfo(StartupInfo);


  //StartupInfo.wShowWindow := SW_SHOWNORMAL;

  if WTSQueryUserToken(WtsGetActiveConsoleSessionID, hToken ) then
    begin
      res := CreateProcessAsUser(
                  hToken,
                  PChar( 'C:\Proje\Test.exe' ),
                  nil,
                  nil,
                  nil,
                  False,
                  CREATE_NEW_CONSOLE,
                  nil,
                  nil,
                  StartupInfo,
                  ProcessInfo );

      if res then
        WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    end;
end;
Servis içerisinde EXE çalıştırmak için çağrılması gereken procedure...

Fonksiyona 2.Parametre ( lpApplicationName ) olarak çalıştırmak istediğiniz programı TAM YOLU ile göndermek gerekiyor... Ancak çalıştıracağınız programa parametre gönderemiyorsunuz!!!!

Çalıştıracağınız programa parametre göndererek çalıştırmak istiyorsanız; Fonksiyonda 2.Parametreyi ( lpApplicationName ) nil gönderip, 3.Parametreye ( lpCommandLine ) çalıştıracağınız exe ve parametreleri gönderebilirsiniz...

Kod: Tümünü seç

      res := CreateProcessAsUser(
                  hToken,
                  nil,
                  PChar( 'C:\Proje\Test.exe parametre1 parametre2 parametre3' ),
                  nil,
                  nil,
                  False,
                  CREATE_NEW_CONSOLE,
                  nil,
                  nil,
                  StartupInfo,
                  ProcessInfo );
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com
Kullanıcı avatarı
yhackup
Üye
Mesajlar: 115
Kayıt: 09 Ağu 2014 09:09
İletişim:

Re: Service Application ile Başka Bir Program Çalıştırmak hk.

Mesaj gönderen yhackup »

ben baya beceriksiz çıktım yine de çalıştıramadım :(
Çaylak Delphici :D

Yakup ULUTAŞ
serince
Üye
Mesajlar: 4
Kayıt: 11 Oca 2015 07:35

Re: Service Application ile Başka Bir Program Çalıştırmak hk.

Mesaj gönderen serince »

procedure gayet güzel çalışıyor fakat uac manifest eklenmiş bir uygulamayı çalıştıramıyor çözümünü bulan varmı acaba
alitiras
Üye
Mesajlar: 8
Kayıt: 11 Eyl 2014 09:36

Re: Service Application ile Başka Bir Program Çalıştırmak hk.

Mesaj gönderen alitiras »

Hocam Program görünürde çalışıyor hizmetlere gelmiyor. neden olabilir hizmetlerde exe ismi service olarak baktım yok
alitiras
Üye
Mesajlar: 8
Kayıt: 11 Eyl 2014 09:36

Re: Service Application ile Başka Bir Program Çalıştırmak hk.

Mesaj gönderen alitiras »

Result := PVOID(InterlockedExchange(LONG(Target), LONG(Value))); bu satırda
[dcc64 Error] JwaWinBase.pas(6179): E2197 Constant object cannot be passed as var parameter
hatası veriyor windows 11 64 bit delphi 10.4
Cevapla