Buat layanan Windows dari executable

349

Apakah ada cara cepat untuk, mengingat file yang dapat dieksekusi, membuat layanan Windows yang, ketika dimulai, meluncurkannya?

Latorre Jerman
sumber
8
Berikut adalah petunjuk Microsoft tentang cara mencapai ini.
PiRX

Jawaban:

460

Untuk membuat Layanan Windows dari yang dapat dieksekusi, Anda dapat menggunakan sc.exe:

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

Anda harus memiliki tanda kutip di sekitar exejalur aktual , dan spasi setelah tanda kutip binPath=.

Informasi lebih lanjut tentang scperintah dapat ditemukan di Microsoft KB251192 .

Perhatikan bahwa itu tidak akan berfungsi untuk sembarang executable: executable harus menjadi Layanan Windows ( yaitu mengimplementasikan ServiceMain ). Saat mendaftarkan non-layanan yang dapat dieksekusi sebagai layanan, Anda akan mendapatkan kesalahan berikut saat mencoba memulai layanan:

Kesalahan 1053: Layanan tidak menanggapi permintaan awal atau kontrol secara tepat waktu.

Ada alat yang dapat membuat Layanan Windows dari yang dapat dieksekusi, non-layanan yang dapat dieksekusi, lihat jawaban lain untuk contoh alat tersebut.

Sergii Pozharov
sumber
11
Anda (hampir pasti) harus menjalankan command prompt sebagai Administrator agar perintah ini berfungsi
Jeutnarg
2
Jalur juga harus menjadi jalur yang sepenuhnya memenuhi syarat - saya tidak bisa memulai layanan dengan menggunakan jalur relatif.
RunOfTheShipe
4
ruang setelah binpath=dan harus mengelilingi jalan yang dapat dieksekusi dengan tanda kutip ganda benar-benar salah, setidaknya untuk windows 10. kutipan diperlukan jika dan hanya jika jalur berisi karakter khusus seperti spasi. juga, casing (huruf kecil / huruf besar / campuran) tidak masalah di mana pun, dalam nama variabel juga, dan displayname="my service"merupakan barang lain untuk meneruskan baris perintah sembari membuat layanan untuk dilihat sebagai baris pertama ( Name) pada services.msc.
2
Ruang setelah binPath=diperlukan untuk saya pada Windows 7 tetapi tidak pada Windows 10
datchung
242

Gunakan NSSM ( Manajer Layanan yang tidak mengisap ) untuk menjalankan .BAT atau file .EXE apa pun sebagai layanan.

http://nssm.cc/

  • Langkah 1 : Unduh NSSM
  • Langkah 2 : Instal sevice Anda dengannssm.exe install [serviceName]
  • Langkah 3 : Ini akan membuka GUI yang akan Anda gunakan untuk menemukan executable Anda
Kevin Tong
sumber
6
Manajer layanan terbaik. Saya bahkan berhasil mendapatkan PlexWatch untuk diinstal sebagai layanan menggunakan NSSM.
Imperatif
2
apakah set ini adalah layanan selamanya? setiap kali windows mulai layanan akan mulai? juga bagaimana saya bisa melakukan ini tanpa interaksi pengguna? semacam skrip atau kode?
John Demetriou
9
Ini benar-benar hebat, saya berharap saya dapat menerima jawaban ini alih-alih yang pertama, :-(
German Latorre
2
Saya dapat menjalankan Dropbox sebagai layanan di server. Benar-benar alat yang tidak mengisap!
Barry Guvenkaya
1
Apakah file exe harus berupa proyek layanan windows, untuk dapat bekerja dengan nssm atau itu bisa menjadi file exe yang normal? command prompt dll.
Sanjeev
92

Memperluas (Kevin Tong) jawaban.

Langkah 1: Unduh & Unzip nssm-2.24.zip

Langkah 2: Dari jenis baris perintah:

C:\> nssm.exe install [servicename]

itu akan membuka GUI seperti di bawah ini (contohnya adalah server UT2003), kemudian cukup browse ke: yourapplication.exe

masukkan deskripsi gambar di sini

Informasi lebih lanjut tentang: https://nssm.cc/usage


sumber
4
Sintaks yang benar nssm.exe install [serviceName]. Solusi ini berfungsi tetapi jika Anda memiliki Aplikasi GUI, itu tidak akan berfungsi pada Win Serever2003. Jika nanti Anda ingin menghapusnya, gunakannssm.exe remove [youservicename]
Hammad Khan
1
Saya berasumsi referensi ke nginx adalah karena itulah program khusus yang ingin Anda jalankan sebagai layanan? Sampai saya melihat komentar hmd di atas, saya pikir Anda mencoba untuk membantu dengan menyiratkan bahwa nginx adalah dependensi yang diperlukan untuk menginstal atau sesuatu ... tapi kemudian di GUI sepertinya Anda tidak menginstal nginx, Anda menginstal Turnamen Tidak Nyata, Anda menginstal Turnamen Tidak Nyata. server? Hanya menunjukkan bahwa contohnya tidak konsisten dan berpotensi menyesatkan. "Misalkan Anda ingin menginstal nginx sebagai layanan, maka akan terlihat seperti ini:" akan membantu.
flutefreak7
@ flutefreak7 ya nginx tidak perlu dan menyesatkan. Perintah itu akan bekerja tanpanya juga. Ini adalah parameter opsional jika Anda ingin memberikan nama layanan dari command prompt.
Hammad Khan
1
Ketika saya mencoba menggunakan nssm, Windows Forms up saya sedang berjalan tetapi form tidak ditampilkan ... Mengapa?
Radenko Zec
Menjalankan aplikasi Anda sebagai layanan Windows, sebagian besar untuk backend. Bisa juga itu berjalan sebagai root / admin username lain. Anda harus memeriksanya. Juga informasi lebih lanjut Anda dapat memeriksa di sini: nssm.cc/usage
16

Banyak jawaban yang ada termasuk intervensi manusia pada waktu pemasangan. Ini bisa menjadi proses yang rawan kesalahan. Jika Anda memiliki banyak file executable yang ingin diinstal sebagai layanan, hal terakhir yang ingin Anda lakukan adalah melakukannya secara manual pada waktu instalasi.

Menuju skenario yang dijelaskan di atas, saya membuat serman , alat baris perintah untuk menginstal executable sebagai layanan. Yang Anda butuhkan untuk menulis (dan hanya menulis sekali) adalah file konfigurasi layanan sederhana bersama dengan executable Anda. Lari

serman install <path_to_config_file>

akan menginstal layanan. stdoutdan stderrsemuanya sudah login. Untuk info lebih lanjut, lihat situs web proyek .

File konfigurasi yang berfungsi sangat sederhana, seperti yang ditunjukkan di bawah ini. Tetapi juga memiliki banyak fitur berguna seperti <env>dan di <persistent_env>bawah ini.

<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>
KFL
sumber
9

tambahan ini terbukti bermanfaat .. perlu dijalankan sebagai administrator

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

Jika nama layanan Anda memiliki spasi, lampirkan "tanda kutip".

PodTech.io
sumber
Tidak ada perintah INSTALL atau di My Win 2003 sc.exe 5.2.3790.3959, atau dalam M $ F1
user6698332
1
Gunakan "buat" bukan "instal". sc create <service_name> binpath= <binary_path>
CSquared
4

Saya sudah menguji produk yang bagus untuk itu: AlwaysUp . Tidak gratis tetapi mereka memiliki masa uji coba 30 hari sehingga Anda dapat mencobanya ...

A. Masson
sumber
0

Anda dapat memeriksa utilitas gratis kecil saya untuk layanan membuat \ edit \ hapus operasi. Berikut ini contoh pembuatannya:

Pergi ke Layanan -> Ubah -> Buat

masukkan deskripsi gambar di sini

File yang dapat dijalankan (google drive): [Unduh]

Kode sumber: [Unduh]

Posting blog: [BlogLink]

Kelas editor layanan: WinServiceUtils.cs

Sergey Vaulin
sumber