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ı?
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ı?
Yanıtlar:
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 exe
yol etrafında tırnak işareti ve sonra bir boşluk olmalıdır binPath=
.
sc
Komut 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.
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
.
binPath=
Windows 7'de benim için gerekliydi, ancak Windows 10'da değil
Hizmet olarak bir .BAT veya herhangi bir .EXE dosyasını çalıştırmak için NSSM'yi (Emici Olmayan Hizmet Yöneticisi ) kullanın.
nssm.exe install [serviceName]
(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
Daha fazla bilgi için: https://nssm.cc/usage
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]
nginx
gerekli 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.
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. stdout
ve stderr
hepsi 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>
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.
sc create <service_name> binpath= <binary_path>
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
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