Windows Hizmetlerinin pratik kullanımları nelerdir? [kapalı]


18

Windows Services ile çalışmaya yeni başladım. VS2010'da Windows Hizmetleri oluşturmayı öğrenmiş olmama rağmen, Windows hizmetlerinin kullanılabileceği bazı pratik yolları bilmek isterim?

Googling'i mevcut bağlam göz önünde bulundurarak sadece Windows Hizmetlerini nasıl oluşturacağınız hakkında daha fazla eğitim bulmak için denedim.

Ödül Teklifinde DÜZENLE:

Tüm cevaplar harika ama windows hizmetleri ve bunların sonuçları hakkında daha pratik örnekler mi arıyordum ? Bu, geliştiricilerin bunları vaka çalışmasında ne zaman kullanmanın uygun olduğunu bilmelerine yardımcı olacaktır.


28
Pratik örnekler? Şu anda Windows kutunuzda çalışan her hizmete ne dersiniz?
yannis

3
veya * nix kutunuzda çalışan her daemon
jk.

1
Yayın radyosundan klasik müzik kaydetmeyi seviyorum. Bir program ile, 2 am kalkmak ve "kayıt" düğmesine basmak gerekir. Bir servisle, eylemi önceden programlayabilir ve huzur içinde uyuyabilirim. Programlar TV'dir - hizmetler VCR'dir.
Kilian Foth

Yanıtlar:


42

Makinede hiç kimse oturum açmamış olsa bile bir hizmet arka planda çalışır. Bir uygulamayı başlatmak ve bir düğmeyi tıklamak için bir kişiye güvenmeden yapmak istediğinizi hayal edebileceğiniz her şey, bir hizmet için iyi bir adaydır. Örneğin, bir klasörü izlemek ve bir dosya her yazıldığında bir şekilde işlemek. Aklınıza gelebilecek herhangi bir "sunucu" - web sunucusu, ftp sunucusu, posta sunucusu - bir hizmettir ve çoğu zaman aklınıza gelmeyebilecek pek çok arka plan işlemi de vardır.

Bir zamanlar hizmet olarak yazılan bazı şeyler (saat 2'de yedekleme dosyaları, saat 3'te hatırlatma e-postaları vb. Gönder), bugün Windows 7 ve üstü üzerinde muazzam esnekliğe sahip zamanlanmış görevler olarak daha iyi yapılır, ancak geliştirici bunları hiç öğrenmediyse veya sistem XP'yi desteklemelidir, ayrıca bu tür görevleri yapan hizmetleri de bulacaksınız.


1
+1. Mükemmel cevap. Cevap veri tabanı yedeklemesini nasıl çözdüğümü hatırlatıyor. Daha önce yedek almak için exe çağıran bir zamanlayıcı aracılığıyla sunucuda bir SQL yordamı çalıştırmak için kullanılır. Açılan exe ve sonra bir kez yapılır kendi başına kapatılır. Bence bir windows servisi burada daha iyi bir seçenek oldu.
Karthik Sreenivasan

8
Hayır, olmazdı. Bu görevin hala bağlantıları dinlemesi gerekmiyor. Zamanlanmış görevler bu tür bir sorunu çözmenin doğru yoludur.
Wyatt Barnett

2
NTver <6.0 üzerinde de çok sayıda zamanlanmış görev çalıştırıyordum. . .
Wyatt Barnett

1
@Polynomial: Zamanlanmış görevler en azından NT5 + için herhangi bir hesap altında çalıştırılabilir. Katılımsız çalışan her şeyin günlüğe kaydetmesi gerekir, böylece neden başarısız olduğunu anlayabilirsiniz.
Wyatt Barnett

1
Büyük açıklama :). Çalıştığım şirketteki mevcut görüntüleme sistemimiz, dosya işlemek için Windows hizmetlerini kapsamlı bir şekilde kullanıyor. Görüntüler sisteme tarandığı andan itibaren, indeksleme için kuyruğa alma ve arşivlemeye kadar, son olarak da e-posta, yazdırma veya faks yoluyla çıktı alma, hepsi Windows hizmetleri.
kelleystar

9

Windows üzerindeki hizmetler temel olarak GUI olmadan çalışan programlardır. Web sunucuları (apache gibi), veritabanı sunucuları (mysql & sql sunucusu gibi), virüsten koruma motorları ve uygulama / 'ara katman yazılımı' sunucuları, genellikle hizmet olarak çalışan uygulamaların pratik örnekleridir. Hizmetle etkileşime girmenize izin veren GUI istemcisi olabilir, ancak hizmetin kendisinde bir tane yoktur. Sadece 'arka planda' çalışır, işini yapar. Ayrıca, hizmetler kendilerine atanan kullanıcı haklarıyla çalıştığından , atanan kullanıcı olarak çalışabilirlerbir kullanıcının makinede gerçekten oturum açmış olup olmadığı. Dolayısıyla, bir veritabanı sunucusu, makinede o anda oturum açmış olan kişiden bağımsız olarak aynı erişim haklarına sahip olacaktır. Bunun neden önemli olduğunu görebilirsiniz - örneğin, bir web sunucusunun çalışmasını sağlamak için bir kullanıcının oturum açmasını istemezsiniz.

Bunlar, * nix üzerindeki Daemons ile Windows eşdeğeri (en pratik şekilde).


5

Hizmet

Özellikle düşük (donanıma yakın) düzeyde diğer programları desteklemek için belirli bir sistem işlevi gerçekleştiren bir program, rutin veya işlem. Hizmetler bir ağ üzerinden sağlandığında, Active Directory'de yayınlanabilir, bu da hizmet merkezli yönetim ve kullanımı kolaylaştırır.

Windows hizmetlerinin kullanılabileceği bazı pratik yolları bilmek isterim?

Hizmet tanımına göre, Pencere Hizmeti ve diğer hizmet türleri çok fazla işlevsellik sağlar. Bu bağlamda arama motorları arkadaşınızdır .

Windows hizmetleri normalde bir uygulamanın sürekli çalışması gerektiğinde kullanılır. Kullanıcı etkileşimi olmadan arka planda kod çalıştırmak için bir Windows Hizmeti oluşturmanız gerekir .

Hiç kimse oturum açmamış olsa bile bir Windows Hizmeti çalışacaktır. Windows hizmeti, makine açılır açılmaz çalışmaya başlayabilir ; bu, örneğin bir sunucu, http sunucusu olarak çalışmak için idealdir. Giriş yapmak için kimseye gerek yok.

Örneğin:

  1. Gelen istekleri bekleyin. (Uzaktan veya wcf yoluyla olduğu gibi)
  2. Bir sıra, dosya sistemi vb. Zamanlanmış bir görev oluşturmak normalde daha kolaydır.
  3. Bağlantıları kabul eden herhangi bir sunucu (posta, web veya FTP sunucusu gibi) genellikle bir Windows Hizmeti olmalıdır.

Bir hizmeti aşağıdaki nedenlerle kullanırdım:

  • Çalışan bir oturumunuz olması gerekmez. Bu güvenlik için iyidir ve ayrıca sunucudaki ek yükü azaltır.
  • Yönetim komutlarından bazılarını ücretsiz olarak alırsınız
    o Başlat
    o Durdur
    o Duraklat
    o Devam

  • Kapatma gibi sunucu olaylarını işleyebilirsiniz.

Bu hizmetler hakkında ek bilgi içeren bağlantılar:

Asp.net - // TODONT'ta: Zamanlanmış bir işlemi çalıştırmak için bir Windows Hizmeti
kullanın.


Windows hizmeti en yüksek ayrıcalıklarla nasıl çalıştırılır? Örneğin, zamanlanmış görevler mümkündür stackoverflow.com/a/11561410/206730 . IMHO, öğrenme eğrisini en aza indirmek için daha iyi örnekler, tam kaynak kodu ve iyi kalıpları olan gerçek uygulamalardır
Kiquenet

4

Winform veya WPF gibi etkileşimli bir program, kullanıcının açmasını, etkileşim kurmasını ve kapatmasını istediğiniz bir şeydir. Zamanlanmış Görev, arka planda belirli zamanlar olarak çalıştırmak istediğiniz bir şeydir - belki sadece başlangıç ​​yapın, bir şeyler yapın ve durun. Bir Windows Hizmet arka planda her zaman çalıştırmak istediğiniz şeydir.

Bir Windows Hizmetinin bazı avantajları, hangi kullanıcının oturum açmış olursa olsun (veya hiçbir kullanıcı oturum açmamış olsa bile) çalışmasına ve bilgisayar açıldığı anda çalışmaya başlayacak şekilde ayarlanabilmesidir. sistem yeniden başlatılır.

Genellikle klasör veya e-posta gelen kutusu gibi bir şeyi izlemem gerektiğinde hizmetleri kullandım.


3

Sorunuza pratik örnekler hakkında not eklediğinizden, size kurumsal uygulamalar için yazdığım hizmetlerden bazı örnekler vereceğim (kurumsal uygulamalar programcısı olup olmadığınızı söylemezsiniz, ancak tahminim çoğu C # VS2010 programcısının . Sanırım Microsoft için çalışmayan geliştiricilerin ne yazabileceği hakkında bir fikir arıyorsunuz.

Diğer programların hala çalışıp çalışmadığını kontrol eden bir kalp atışı izleme hizmeti (bu da zamanlanan bir görev olarak işe yaramış olabilir, ancak bir hizmet olarak uygulanmış olabilir).

Rapor istekleri kuyruğunda çalışan bir rapor yazma hizmeti, raporları çalıştırdı ve hangi yazıcının meşgul olduğuna bağlı olarak bunları farklı yazıcılara gönderdi. Bu, eski bir uygulamadan oldukça fazla çalışmanın kaldırılmasına yardımcı oldu ve çalışmakta olan raporun hizmeti çalıştıran birden çok ucuz kutu tarafından paylaşılmasına izin verdi.

Bir hizmet olarak uygulandı, böylece sürekli olarak çalışacak, yeniden başlatıldığında otomatik olarak başlayacak ve standart windows hizmetleri arayüzünü başlatmak, durdurmak, duraklatmak vb. İçin kullanabilecektir. Ayrıca, zamanlanmış bir görev olsaydı, diğer programların (soket, boru) çağrısı yerine diğer programlardan veya kalıcı bir kaynaktan (kuyruk, dosya, veritabanı) veri almaya başlayın.

Bir istemci / sunucu uygulamasının sunucu kısmı da yeniden başlatma, vb. Üzerinde yeniden başlayabilmesi için bir hizmet olarak uygulandı. Daha kolay hale getirmek için aynı programı bir hizmet olarak değil çalıştırılan bir .exe ile başka bir proje vardı geliştirme makinelerinde hata ayıklama.

Umarım bu yardımcı olur. Diğer cevaplar daha iyi genel cevaplardır, özellikle de zamanlanmış görevlerin muhtemelen çoğu amaç için yazılması ve yönetilmesi daha kolay olduğu fikri.


+1 Windows hizmetlerinin nerede kullanıldığını ayrıntılı olarak açıklamak için. Soketlere (IP-Adresi üzerinden bağlantı noktaları üzerinden iletişim kurma İstemci-Sunucu modeli) sınırlı maruz kaldım ancak genel olarak borular kullanmadım. Boruların soketler gibi oynamaya benzer bir rolü var mı?
Karthik Sreenivasan

2

Bir hizmet için birçok pratik kullanım vardır. Ana pratik kullanımlardan biri UI ve hizmet (veya unix'te daemon) programları arasındaki etkileşimdir, bu durumda bir istemci ve bir sunucu arasındaki farktır. Sunucu istekleri alır, isteği işler ve genellikle bir yanıt gönderir. Başka bir deyişle, bir istek HİZMET EDER. SQLSERVER, IIS veya telnet hakkında düşünün. İstemci, genellikle sunucuya istek göndererek ve ardından yanıtı görüntüleyerek veya işleyerek bir sunucu kullanır. yani bir veri girişi uygulaması, bir web uygulaması ... Sunucu neredeyse her zaman pencerelerde bir servis olarak kurulur (veya unix'te bir daemon) ve istemci genellikle sadece bir GUI ile normal bir uygulamadır. Bir hizmetin daha karmaşık kullanımları vardır, ancak muhtemelen en çok kullanacağınız budur.

Örneğin: Şu anda bir SIP / H323 video sunucusu üzerinde çalışıyorum. Yazdığım bir SDK kullanan bir uygulamadan istekleri alır, işler ve yanıtlar. Video sunucusu uygulaması gömülü bir linux makinesinde bir daemon olarak yüklenir (gömülü bir Windows makinesinde bir hizmet olur, ancak zaten gömülmüş için Windows'u kullanan) ve SDK'yı kullanan herhangi bir uygulama bir istemci olarak kabul edilir.

Tabii ki, bu tür uygulamaları yazabilir ve onları bir hizmet yapamazsınız. Yine de Windows'u başlattıktan sonra başlatabilir ve arka planda çalışmasını sağlayabilirsiniz. Ancak, birkaç kayıt defteri girdisi ve kodunuzda bazı geçişler içerir - c api'yi kullanarak .NET gibi bir şeyden çok daha kolaydır. Öte yandan Microsoft, hizmetler oluşturarak ve bunları işletim sistemine kaydettirmemize izin vererek bunu çok daha kolay hale getirdi. Uygulamayı manuel olarak yapmaktan çok daha basit ve kolaydır.


+1 - Sadece açıklığa kavuşturmak için, hizmet sunucuda bir windows hizmeti olarak barındırılır ve daha sonra istemci SDK, geri bildirim almak için verileri iletmek üzere bir bağlantı noktası üzerinden sunucuya bilgi gönderir. Anlayışım doğru mu?
Karthik Sreenivasan

1
@Karthik, Tasarım desenine mi yoksa örneğime mi atıfta bulunuyorsunuz? Eğer öncekine, evet .. ya da Unix'te bir daemon. İletişim bir çeşit TCP / IP olacaktır. Örneğime atıfta bulunuyorsanız, video sunucusu gömülü bir linux makinesinde bir arka plan programıdır. SDK bir bağlantı noktası üzerinden iletişim kurar, video sunucusunun istemci isteklerini işlemek için kullandığı bir dinleme döngüsü vardır.
Jonathan Henson

@Karthik, bu arada TCP / IP veya Pipes olmak zorunda değil. İnsanların süreçler arası iletişimi gerçekleştirmek için yuvalarla sinyal kullandıklarını gördüm. Bununla birlikte, tasarım deseni aynıdır. Nasıl iletişim kurduğunuz projenin mimarıdır.
Jonathan Henson

Örneğe bakıyordum.
Karthik Sreenivasan

2

Aday programlara örnekler:

  • Kaynakları / diğer uygulamaları izlemesi ve rapor göndermesi gereken sistemler (kullanıcı etkinliği, belirli dosya trafiği türleri, uygulama hatalı davranış bildirimleri)

  • Diğer yerel uygulamalara hizmet sunan sistemler (çeviriler, dosya dönüştürme, sistemler arası mesajlaşma)

  • Antivirüs yazılımı.

Bence bunlar zamanlanmış görevler kullanılarak kolayca yapılamayacak büyük örneklerdir.


Örnekler için +1. Dosya trafiği hakkında bilgi verebilir misiniz?
Karthik Sreenivasan

1
Örneğin, dosya yüklemelerinde ara sıra ani artışlar gören bir web uygulamanız varsa, birini uyarmak istersiniz. Ayrıca, bu, zamanlanmış kontrollerle (diğer adlandırma nedeniyle) tespit edilemeyen ani artışları (ör. Web trafiği, işlemci kullanımı) görebilen tüm kaynaklar için geçerlidir.
linkerro

2

En sevdiğim hizmetleri kullanma örnekleri:

  1. Sunucular - uzak istemcilerden gelen istekleri sunan programlar. Herhangi bir kullanıcı sunucuda oturum açmış olsun ya da olmasın, kullanılabilir olduklarından emin olmak için genellikle hizmet olarak çalışırlar. Hizmet olarak çalıştırmak, sunucunun makine başlar başlamaz istekleri işlemeye başladığı anlamına gelir; makine herhangi bir nedenle yeniden başlatıldıktan sonra hiç kimse programa başlamak için makinede oturum açmak zorunda değildir. Bir veritabanı sunucusu buna iyi bir örnektir.
  2. Arka plan işleme - bir veri kaynağından veri işlemekten ve sonuçları bir veri hedefine kaydetmekten sorumlu programlar. Veri hedefi genellikle başka bir işlem için bir kaynaktır vb. Hizmet olarak çalıştırmak, bu programların sadece orada oturmasına ve verilerin gelmesini beklemesine izin verir. Ayrıca geliştiricilerin, süreci çoklu yarı bağımsız adımlara bölerek işlemenin sağlamlığını geliştirmesini sağlar.

Veritabanı sunucusu için +1. İşler yerinde düşüyor. Hepimiz sunucuda bulunan hizmet tarafından işlenen veritabanına bağlanmak için SqlConnection veya OledbConnection kullanırız.
Karthik Sreenivasan

2

Hizmet konseptinin gerçek kodla örnek kullanımı (aşağıda se).

Yaptığı şey, kuyruktan tüketen ve web sunucularından ve istemci GUI'lerinden gelen mesajları dinleyen bir servis veri yolu yapılandırmaktır.

İletileri aldığında alan adının gerektirdiği mantığı yapar, olayları diske kaydeder ve bu olayları Message Broker'da yayınlar.

Gevşek bir şekilde birleştirilen daha büyük uygulamalar, aşağıdaki gibi bir tür "işçi" mimarisi uygular.

Documently projesi, sizin gibi insanların dağıtılmış mimarileri öğrenmesi için oluşturduğumuz örnek bir projedir. Projede doğrudan bana soru sorabilir veya çatallayabilir ve öğrenmek için bir özellik uygulayıp ardından bir çekme isteği gönderebilirsiniz (ve kod yorumları alabilirsiniz).

https://github.com/haf/Documently/blob/master/src/Documently.Domain.Service/Program.cs :

using System.Threading;
using Castle.MicroKernel.Registration;
using Castle.Windsor;
using Documently.Infrastructure;
using Documently.Infrastructure.Installers;
using MassTransit;
using Topshelf;
using log4net;
using log4net.Config;

namespace Documently.Domain.Service
{
    class Program
    {
        private static readonly ILog _Logger = LogManager.GetLogger(typeof (Program));

        private IWindsorContainer _Container;
        private IServiceBus _Bus;

        public static void Main(string[] args)
        {
            Thread.CurrentThread.Name = "Domain Service Main Thread";
            HostFactory.Run(x =>
            {
                x.Service<Program>(s =>
                {
                    s.ConstructUsing(name => new Program());
                    s.WhenStarted(p => p.Start());
                    s.WhenStopped(p => p.Stop());
                });
                x.RunAsLocalSystem();

                x.SetDescription("Handles the domain logic for the Documently Application.");
                x.SetDisplayName("Documently Domain Service");
                x.SetServiceName("Documently.Domain.Service");
            });
        }

        private void Start()
        {
            XmlConfigurator.Configure();
            _Logger.Info("setting up domain service, installing components");

            _Container = new WindsorContainer()
                .Install(
                    new RavenDbServerInstaller(),
                    new CommandHandlerInstaller(),
                    new EventStoreInstaller(),
                    new BusInstaller(Keys.DomainServiceEndpoint)
                    );

            _Container.Register(Component.For<IWindsorContainer>().Instance(_Container));
            _Bus = _Container.Resolve<IServiceBus>();

            _Logger.Info("application configured, started running");
        }

        private void Stop()
        {
            _Logger.Info("shutting down Domain Service");
            _Container.Release(_Bus);
            _Container.Dispose();
        }
    }
}

Bir örnekle göstermek için +1. Daha iyi bir anlayış elde etmek için örneğinizi uygulamaya çalışacağım.
Karthik Sreenivasan

2

Bir süre önce ekibim, Brezilya'daki bir bankaya aşağıdaki gibi 3 pencere hizmeti uygulamıştır:

  • Sistemler arası arayüz: Borsada işlem rezervasyonu yapmaktan sorumlu bir ön büro uygulamamız ve işlem ücretlerini hesaplamak ve hesaplamaktan sorumlu bir arka ofis uygulamamız vardı. Başlangıçta, sistemler arası iletişim doğrudan SQL Server'da yapıldı, ancak çok fazla kilitleme ve tutma sorunu, sistemin düşük performanstan muzdarip olmasını sağladı. Hem ön hem de arka veritabanlarına bağlanmak ve bir çeşit tutma stratejisi kullanarak doğru okuma / yazma yapmak için bir hizmet uygulandı (SQL Server'daki her bir ticareti yazmak yerine, 1000 işlem ve orijinal çözümden 40 kat daha hızlı olan ve ilgili tabloların çoğunu uzun süre kilitlemeyen toplu bir ekleme yaptı).

  • Message Queue: Önceki çözümün yanı sıra, özel bir toplu işlem sırası işleyicisi yazdık, böylece birkaç toplu işlem yordamı eşzamansız olarak çalışabilir. Bu hem MSMQ hem de IBM-MQSeries ile entegre edildi.

  • İşletme hizmetlerinin merkezileştirilmesi: Birçok kullanıcı uygulamasının hisse senedi fiyatları olarak ortak verilere ihtiyacı vardı, bu nedenle "fiyat talepleri" almak ve fiyat bilgilerini geri göndermekle sorumlu özel bir hizmet yazdık.

Bizi "robotlar" yerine hizmetler yazmaya yönlendiren yönlerden biri, hizmetlerin belirli bir kullanıcı olarak çalışabilmesidir (birisi bu iş parçacığında zaten işaret ettiği gibi) ve makine açıldığında otomatik olarak başlatılabilir.

Hizmetlerin çalışması için bir masaüstü veya pencere yönetim hizmetine de gerek yoktur. Onlar arka (kuyu, onlar üzerinde çalışabilir olmalıdır arka planda çalışabilir).

Ve eğer kullanıcı arayüzleri yazmaktan hoşlanmayan bazı arkadaşlarım gibiyseniz, hizmetler büyük teknolojik zorluklardır, çünkü genellikle başarısız olmamalıdırlar. Bu yüzden bir servis yazmak çok eğlenceli. :)


+1 Canlı örnek. Burada herkes tarafından sağlanan tüm iyi cevaplardan şimdi windows hizmetlerinin uygun kullanımı hakkında daha iyi bir anlayış elde ediyorum ve diğer programcılar kesinlikle burada bilgi paylaşımından faydalanacağını düşünüyorum. Geçmişte çalıştığım bazı uygulamalar windows hizmetleri kullanılarak daha iyi uygulanabilirdi.
Karthik Sreenivasan

0

Standart kullanıcı olarak çalışması gereken, ancak bazen yönetici ayrıcalıkları gerektiren bir görev gerçekleştirmesi gereken bir Windows masaüstü uygulaması tasarlıyorsanız, bir hizmet kullanabilirsiniz.

Yükleyiciniz hizmeti gerekli izinlerle yükler, masaüstü uygulamanız yönetici ayrıcalıklı bir görev gerçekleştirmesi gerektiğinde hizmeti çağırır.

Bu yaklaşımın, bu cevabın kapsamı dışında kalan güvenlik etkileri vardır.


Doğru anlarsam, windows hizmetleri yönetici izni olmadan çağrılamaz mı?
Karthik Sreenivasan

2
Hayır, Windows Hizmetleri yönetici izinleri olmadan yüklenemez veya başlatılamaz. Ancak hizmet dinliyorsa herhangi bir kullanıcı onlarla iletişim kurabilir (soketleri, adlandırılmış boruları vb. Düşünün)
Eclipse

1
Kesinlikle standart bir kullanıcı bir Windows hizmetini başlatabilir ve arayabilir. Hizmetin bir yönetici kullanıcı tarafından yüklenmesi gerekir.
Jim In Texas

0

Programcılar için hizmeti kullanmanın başlıca nedeni:

  • Bu program, yeniden başlatıldıktan sonra bir Windows makinesinde otomatik olarak başlamalıdır.

Yukarıdakilere uyması gereken yazdığınız her şey bir Windows Hizmeti olarak çalıştırılmalıdır.


0

Son kullanıcı perspektifinden yazdığım en kullanışlı hizmet:
* Kullanıcı, UWLY faturalarını, RAW yazdırma sürücüsüne sahip bir nokta vuruşlu yazıcıda yazdırdı.
* Kullanıcı logo, düzgün çizgi grafik ile bir PRETTY fatura istedi.
* Eski koda erişim yok.

Hizmet:
* Yazdırma işleri için monitör (çoklu) yazıcı klasörleri.
* Faturanın PDF dosyasını oluşturun.
* PDF güzel bir boş fatura görüntüsünün "altını çizer"
* Ham metni
üst üste bindirir * Kullanılan klasöre göre meta verilere bakın (IE: kullanılan yazıcı)

Sonra meta veriler şöyle olur:
* PDF oluşturun
* ve / veya PDF yazdırın * ve / veya PDF faturasını müşteriye e-posta ile gönderin
* ve / veya PDF'yi bir son hedef klasöre dosyalayın
* ve / veya PDF'yi silin

Bu durumda, hayalet komut dosyası, PLC ve PDF motorlarını işler. Yıllardır çok temiz çalışıyor. Günlük dosyalarını dahil et !!!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.