Apakah ada cara cepat untuk, mengingat file yang dapat dieksekusi, membuat layanan Windows yang, ketika dimulai, meluncurkannya?
Apakah ada cara cepat untuk, mengingat file yang dapat dieksekusi, membuat layanan Windows yang, ketika dimulai, meluncurkannya?
Jawaban:
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 exe
jalur aktual , dan spasi setelah tanda kutip binPath=
.
Informasi lebih lanjut tentang sc
perintah 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.
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
.
binPath=
diperlukan untuk saya pada Windows 7 tetapi tidak pada Windows 10
Gunakan NSSM ( Manajer Layanan yang tidak mengisap ) untuk menjalankan .BAT atau file .EXE apa pun sebagai layanan.
nssm.exe install [serviceName]
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
Informasi lebih lanjut tentang: https://nssm.cc/usage
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]
nginx
tidak perlu dan menyesatkan. Perintah itu akan bekerja tanpanya juga. Ini adalah parameter opsional jika Anda ingin memberikan nama layanan dari command prompt.
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. stdout
dan stderr
semuanya 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>
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".
sc create <service_name> binpath= <binary_path>
Anda dapat memeriksa utilitas gratis kecil saya untuk layanan membuat \ edit \ hapus operasi. Berikut ini contoh pembuatannya:
Pergi ke Layanan -> Ubah -> Buat
File yang dapat dijalankan (google drive): [Unduh]
Kode sumber: [Unduh]
Posting blog: [BlogLink]
Kelas editor layanan: WinServiceUtils.cs