Windows işletim sistemi üzerinde çalışan bir jar uygulaması bat dosyası ile tetikleyerek açıyorum.Programın kapanması durumunda birinin tekrar elle çalıştırması gerekiyor. Fakat ben Windows üzerinde servis yazarak program kapandığı anda tekrar otomatik olarak ayağa kalkmasını istiyorum. Ne gibi bir çözüme gidilebilir?

soruldu: 25 Ara '13, 17:19

MDemir's gravatar image

MDemir
2.1k173445
cevap kabul oranı: 24%


permanent link

cevaplandı: 29 Ara '13, 14:03

rahmanyazgan's gravatar image

rahmanyazgan ♦
4.4k83559
cevap kabul oranı: 26%

değiştirildi: 15 Oca '14, 10:02

Teşekkürler cevap için. Ama benim asıl sormak istediğim çalışan bir programın kapandığı anda onu tekrar ayağa kaldıracak servisin yazılması.

(15 Oca '14, 05:23) MDemir MDemir's gravatar image
1

Hocam algoritma kısmını merak ediyorsanız yapmanız gereken:

  • Programı başlatan kod bloğun olacak. Kolaylık açısından sisteme özel çalıştırılabilir dosyalardan(.sh, .bat, .exe) faydalanabilirsin: System.Diagnostics.Process.Start(@".../program.exe");

  • Programın görev yöneticisindeki pid değerine ulaşmak. Hangi sistem olursa olsun her sistemde programın pid değerine kodla ulaşabilirsin. (http://goo.gl/VbdjfS)

  • Bu pid değerinin istediğin sürelerde varlığını kontrol ederek programın çalışıp çalışmadığını öğrenebilirsin.

CSharp'a göre düzenledim yorumu.

(15 Oca '14, 08:53) rahmanyazgan ♦ rahmanyazgan's gravatar image

Tabi buradan çıkan sonuç windows servisi vs. yazmadan da bu yöntemle bu işin halledilebileceği gerçeği. Üstelik platform bağımsız bir yöntem.

(15 Oca '14, 08:53) rahmanyazgan ♦ rahmanyazgan's gravatar image

Ben yazdığım servis ile belli bir zaman aralığında bu ID değerinin varlığını kontrol ediyorum diyelim. Uygulama çalışırken ID=12345 olsun, program kapandı ve kısa bir süre sonra windows işletim sistemi bu ID'yi başka bir programa atayabilir mi? Eğer başka programa atanırsa benim servis zamanı geldiğinde tekrar kontrol ettiğinde bu ID değerinin var olması durumunda asıl programın kapalı olduğunu anlayamayacak ve işlevini yapmamış olacak.

(15 Oca '14, 09:09) MDemir MDemir's gravatar image

Aklım Java'ya gitmiş, CSharp etiketini yeni görüyorum :)

Evet program kapandıktan sonra o pid değeri boşta olur, yeni program atanabilir. Ayrıca program her başlangıçta genellikle farklı pid değerine sahip olur. Yukarıdaki gibi (Process.Start) komutlarla veya servisle başlattığın program içinden pid değerini bir yere yazdırmak gerekir. Temp dizini veya kullanıcı dizini kullanılabilir.

Bu pid değeriyle yapabileceğin diğer bir iş de programın 2. defa açılmasını önlemektir. Yani aynı anda sadece tek program çalıştırmak istersen bir taşla iki kuş vurabilirsin.

(15 Oca '14, 09:59) rahmanyazgan ♦ rahmanyazgan's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×238
×17

Soruldu: 25 Ara '13, 17:19

Görüntüleme: 902 kez

Son güncelleme: 15 Oca '14, 10:03

powered by BitNami OSQA