Cara memulai layanan dengan parameter awal tertentu pada Windows

17

Bagaimana cara memulai layanan dengan parameter tertentu? Dalam pertanyaan lain yang saya temukan

net start servicename bla

tetapi jika saya mencoba ini, netmelempar kesalahan sintaks pada saya.

Apa yang saya lakukan salah?

Sunting: Untuk mengklarifikasinet start servicenameberfungsi dengan baik, tapi saya perlu memberikan parameter ke layanan. Saya dapat melakukan ini secara manualservices.mscdengan mengisi parameter mulai sebelum memulai layanan. Tetapi bagaimana saya bisa melakukan ini dari naskah?

Suntingan lain: Maaf, tapi pertanyaan saya menyesatkan . Dalam pengujian saya, saya memiliki lebih banyak parameter dan itu bukan/blah net startkeluhan. Bahkan, apa pun yang dimulai dengan garis miring tidak masalah . Jadinet start servicename /blahbekerja,net start servicename blahtidak berhasil. Karena saya butuhnet start servicename /foo bar,baritulah masalahnya.

sbi
sumber

Jawaban:

29
sc mulai fooservice arg1 arg2 ...
pengguna1686
sumber
Saya tidak tahu bagaimana saya bisa melewatkan jawaban Anda saat itu, tapi saya pasti sangat senang saya menemukannya sekarang (secara tidak sengaja). Ini berfungsi seperti pesona - bahkan dengan parameter yang tidak dimulai /. Terima kasih banyak!
sbi
Ini tahun 2018 dan "sc start ..." atau "net start ..." tampaknya tidak berfungsi di Windows 10. Mengedit registri tidak berfungsi serverfault.com/questions/507561/…
MarcH
8

NET STARTtidak akan memungkinkan Anda untuk melewati parameter sewenang-wenang sejauh yang saya tahu (tampaknya mereka harus diawali dengan a /), saya percaya cara yang benar adalah dengan memodifikasi kunci registri yang sesuai dan menghentikan / memulai layanan. Dengan asumsi layanan khusus Anda disebut MyService:

[HKLM\SYSTEM\CurrentControlSet\Services\MyService]
"ImagePath":C:\Projects\MyService\bin\MyService.exe Parameter1 Parameter2

Sebenarnya, cara yang lebih baik adalah menyimpan konfigurasi Anda di suatu tempat yang diketahui oleh layanan, seperti mungkin sistem registri atau file, dan membaca nilai apa pun yang Anda butuhkan. Seperti yang Anda lihat menyesuaikan baris perintah sedikit lebih menyakitkan daripada yang seharusnya.

Jika ini kebetulan merupakan layanan yang dikembangkan .NET, Anda dapat membuat n salinan yang dapat dieksekusi pada sistem file Anda, dan masing-masing secara otomatis mendapatkan parameter dari file app.config yang sesuai.

Sepertinya Anda mungkin telah melangkah terlalu jauh di luar kotak Win32. Karena ini kedengarannya seperti pengembangan kustom, salah satu dari solusi lain yang ditawarkan, walaupun mungkin bukan yang ideal Anda, akan bekerja dengan benar dan merupakan cara yang lebih aman untuk dilakukan.

Goyuix
sumber
Ugh. Layanan ini mengambil file konfigurasi. Entah itu menggunakan nama file default atau yang diteruskan ke sana. Karena saya memerlukan dua contoh berbeda dari layanan yang berjalan, saya perlu menunjukkannya pada file konfigurasi yang berbeda. Harus mengutak-atik registri tampaknya peretasan yang sangat jelek. Apakah benar-benar tidak ada cara lain selain itu (dan GUI)?
sbi
Goyuix, lihat pertanyaan saya yang diedit. net start tidak menerima parameter, tetapi hanya yang dimulai dengan a /.
sbi
Goyuix, saya sekarang menggunakan sc.exe. Lihat jawaban grawity (yang entah bagaimana berhasil saya lewatkan saat itu).
sbi
4

Anda perlu garis miring sebelum setiap parameter saat menggunakan net start. Pastikan juga untuk mengutip parameter yang memiliki spasi.

net start servicename /param0 /"param1 with spaces" /"/param2_has_slash"
Bahkan Mien
sumber
Lihat lagi masalah saya. Saya punya parameter yang (harus) dimulai dengan garis miring juga. Bagaimana saya melewati itu?
sbi
Coba ini: net start servicename / "/ foo" / bar
Even Mien
3

net start servicename /foo untuk satu argumen

net start servicename /"foo bar" untuk string atau daftar argumen

Catatan : Pertanyaan ini berumur 8 tahun tetapi saya tidak memiliki reputasi untuk mengomentari jawaban yang diterima dan ini masih merupakan hasil teratas Google pada tahun 2018 jadi saya ingin mengklarifikasi apa yang berfungsi sekarang sehubungan dengan pertanyaan edit terakhir.

MissingL_tter
sumber
Catatan: Saya memberi Anda upvote, jadi sekarang jawaban Anda ada di posisi ke-4, dan Anda mendapat masalah. Selamat bersenang-senang di sini! :-)
sbi
1

Anda perlu menggunakan nama layanan yang sebenarnya seperti yang muncul di panel kontrol, layanan. Jika berisi spasi, Anda harus memberi tanda kutip di sekitar nama layanan.

Untuk mendapatkan nama layanan yang sebenarnya, ketikkan saja net starttanpa parameter apa pun pada prompt perintah. Seharusnya memberi Anda daftar semua layanan yang berjalan sehingga Anda bisa mendapatkan nama layanan yang sebenarnya. Maka gunakan sajanet start <servicename>

Robert Williams
sumber
Robert, ini adalah layanan saya yang saya instal dan kemudian mulai dalam skrip. Saya net start "my-service-name"baik-baik saja. Itu net start "my-service-name" /blahyang memberi saya pesan kesalahan. Saya juga sudah mencoba net start "my-service-name" -blahdan ini juga merupakan kesalahan sintaksis.
sbi
0

Bisakah InstSrv dan SrvAny membantu dalam hal ini? Panduan dan Tautan

Dave M
sumber
Saya telah melihatnya sebentar dan saya pikir tidak. (Tolong koreksi saya jika saya salah.) Saya memiliki layanan nyata yang dapat dijalankan dan berjalan dengan baik. Hanya saja (untuk tes) saya perlu menginstal dan memulainya dari skrip, dan saya perlu memberikan parameter ke layanan.
sbi