Yürütülebilir dosyadan Windows hizmeti oluşturma


349

Yürütülebilir bir dosya verildiğinde, başlatıldığında başlatılan bir Windows hizmeti oluşturmanın hızlı bir yolu var mı?


8
İşte Microsoft'un bunu nasıl başaracağına ilişkin talimatları.
PiRX

Yanıtlar:


460

Bir yürütülebilir dosyadan bir Windows Hizmeti oluşturmak için aşağıdakileri kullanabilirsiniz sc.exe:

sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"

Gerçek exeyol etrafında tırnak işareti ve sonra bir boşluk olmalıdır binPath=.

scKomut hakkında daha fazla bilgi Microsoft KB251192'de bulunabilir .

Sadece herhangi bir yürütülebilir dosya için çalışmaz: yürütülebilir bir Windows hizmeti ( yani ServiceMain uygulamak ) olmalıdır. Hizmet dışı bir yürütülebilir dosyayı hizmet olarak kaydederken, hizmeti başlatmaya çalıştığınızda aşağıdaki hatayı alırsınız:

Hata 1053: Hizmet, başlatma veya denetim isteğine zamanında yanıt vermedi.

İsteğe bağlı, hizmet dışı yürütülebilir dosyalardan bir Windows Hizmeti oluşturabilen araçlar vardır, bu tür araç örnekleri için diğer yanıtlara bakın.


11
Bu komutun çalışması için (neredeyse kesinlikle) komut istemini Yönetici olarak çalıştırmanız gerekir
Jeutnarg

2
Yolun da tam yol olması gerekir - göreli bir yol kullanarak hizmetimin başlamasını sağlayamadım.
RunOfTheShipe

4
binpath=en az Windows 10 için çalıştırılabilir yolu çift tırnaklarla çevrelemek zorunda kaldıktan sonra boşluk tamamen yanlıştır. 10 ve yalnızca yol beyaz boşluk gibi özel karakterler içeriyorsa tırnak işareti gereklidir. Ayrıca, kasa (lowe / upper / mixed-case) herhangi bir yerde, değişken adlarında da önemli değildir displayname="my service"ve ilk satır ( Name) olarak görüntülenecek bir hizmet oluştururken komut satırından geçmek için başka bir goodie'dir services.msc.

2
Sonraki boşluk binPath=Windows 7'de benim için gerekliydi, ancak Windows 10'da değil
datchung

242

Hizmet olarak bir .BAT veya herhangi bir .EXE dosyasını çalıştırmak için NSSM'yi (Emici Olmayan Hizmet Yöneticisi ) kullanın.

http://nssm.cc/

  • 1. Adım : NSSM'yi indirin
  • Adım 2 : sevice ile yükleyinnssm.exe install [serviceName]
  • Adım 3 : Bu, yürütülebilir dosyalarınızı bulmak için kullanacağınız bir GUI'yi açacaktır

6
Şimdiye kadar en iyi servis yöneticisi. Hatta NSSM kullanarak bir hizmet olarak PlexWatch almak başardı.
Emir

2
Bu set sonsuza dek bir hizmet midir? Windows her başladığında hizmet başlayacaktır? ayrıca bunu kullanıcı etkileşimi olmadan nasıl yapabilirim? bir tür kod veya kod?
John Demetriou

9
Bu kesinlikle harika, keşke birincisi yerine bu cevabı kabul edebilsem, :-(
Alman Latorre

2
Dropbox'ı sunucuda bir hizmet olarak çalıştırabilirim. Kesinlikle emici olmayan bir araç!
Barry Guvenkaya

1
Nssm ile çalışabilmek için exe dosyası bir windows hizmeti projesi olmalı mı, yoksa normal bir exe dosyası olabilir mi? komut istemi vb.
Sanjeev

92

(Kevin Tong) cevabı genişletiliyor.

Adım 1: nssm-2.24.zip dosyasını indirin ve açın

Adım 2: Komut satırı türünden:

C:\> nssm.exe install [servicename]

GUI'yi aşağıdaki gibi açacaktır (örnek UT2003 sunucusudur), ardından sadece şuraya göz atın: yourapplication.exe

resim açıklamasını buraya girin

Daha fazla bilgi için: https://nssm.cc/usage


4
Doğru Sözdizimi nssm.exe install [serviceName]. Bu çözüm çalışır, ancak bir GUI Uygulamanız varsa, Win Serever2003 üzerinde çalışmaz. Daha sonra kaldırmak isterseniz, kullanınnssm.exe remove [youservicename]
Hammad Khan

1
Ben nginx referans olduğunu düşünüyorum çünkü bu hizmet olarak çalıştırmak istediğiniz belirli bir program? Yukarıdaki hmd'nin yorumunu görene kadar, nginx'in yüklemek için gerekli bir bağımlılık veya bir şey olduğunu ima ederek yardım etmeye çalıştığınızı düşündüm ... ama sonra GUI'de nginx yüklemiyormuşsunuz gibi görünüyor, bir Unreal Turnuvası kuruyorsunuz sunucu? Sadece örneğin tutarsız ve potansiyel olarak yanıltıcı olduğuna dikkat edin. Basit bir "diyelim ki nginx'i bir hizmet olarak yüklemek istiyorsunuz, o zaman şöyle görünecektir:" yardımcı olacaktır.
15:22

@ flutefreak7 evet nginxgerekli ve yanıltıcı değildir. Komut da onsuz çalışacaktır. Komut isteminden hizmet adı sağlamak istiyorsanız isteğe bağlı bir parametredir.
Hammad Khan

1
Nssm kullanmaya çalıştığımda Windows Formlarım çalışıyor ancak form gösterilmiyor ... Neden?
Radenko Zec

Uygulamanızı Windows hizmeti olarak çalıştırıyor, çoğu arka uç için. Ayrıca başka bir kök / yönetici kullanıcı adı olarak çalışıyor olabilir. kontrol etmelisin. Ayrıca daha fazla bilgiyi buradan kontrol edebilirsiniz: nssm.cc/usage

16

Birçok mevcut cevap, kurulum zamanında insan müdahalesini içerir. Bu, hataya açık bir süreç olabilir. Hizmet olarak yüklenmek istediğiniz çok sayıda yürütülebilir dosya varsa, yapmak istediğiniz son şey bunları yükleme zamanında manuel olarak yapmaktır.

Yukarıda açıklanan senaryoya doğru, çalıştırılabilir bir hizmet olarak yüklemek için bir komut satırı aracı olan serman yarattım . Yazmanız gereken tek şey (ve sadece bir kez yazmak), yürütülebilir dosya ile birlikte basit bir servis yapılandırma dosyasıdır. Çalıştırmak

serman install <path_to_config_file>

hizmeti yükleyecektir. stdoutve stderrhepsi günlüğe kaydedilir. Daha fazla bilgi için proje web sitesine bakınız .

Aşağıda gösterildiği gibi çalışan bir yapılandırma dosyası çok basittir. Ama aynı zamanda <env>ve <persistent_env>aşağıdaki gibi birçok yararlı özelliğe sahiptir .

<service>
  <id>hello</id>
  <name>hello</name>
  <description>This service runs the hello application</description>

  <executable>node.exe</executable>

  <!-- 
       {{dir}} will be expanded to the containing directory of your 
       config file, which is normally where your executable locates 
   -->
  <arguments>"{{dir}}\hello.js"</arguments>

  <logmode>rotate</logmode>

  <!-- OPTIONAL FEATURE:
       NODE_ENV=production will be an environment variable 
       available to your application, but not visible outside 
       of your application
   -->
  <env name="NODE_ENV" value="production"/>

  <!-- OPTIONAL FEATURE:
       FOO_SERVICE_PORT=8989 will be persisted as an environment
       variable to the system.
   -->
  <persistent_env name="FOO_SERVICE_PORT" value="8989" />
</service>

9

bu ekstralar yararlı .. yönetici olarak yürütülmesi gerekiyor

sc create  <service_name> binpath=<binary_path>
sc stop    <service_name>
sc queryex <service_name>
sc delete  <service_name>

Hizmet adınızda boşluk varsa "tırnak işaretleri" içine alın.


INSTALL komutu veya ne My Win 2003 sc.exe 5.2.3790.3959'da ne de M $ F1'de
user6698332

1
"İnstall" yerine "create" komutunu kullanın. sc create <service_name> binpath= <binary_path>
CSquared

4

Bunun için iyi bir ürünü test ettim: AlwaysUp . Ücretsiz değil ama bir 30 günlük deneme süresi var, bu yüzden bir deneyin ...


0

Hizmet oluşturma \ düzenleme \ silme işlemleri için küçük ücretsiz yardımcı programımı kontrol edebilirsiniz. İşte örnek oluşturma:

Hizmet -> Değiştir -> Oluştur'a gidin

resim açıklamasını buraya girin

Yürütülebilir dosya (google sürücü): [İndir]

Kaynak kodu: [İndir]

Blog yayını: [BlogLink]

Hizmet düzenleyici sınıfı: WinServiceUtils.cs

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.