Cách bắt đầu một dịch vụ với các tham số bắt đầu nhất định trên Windows


17

Làm cách nào để bắt đầu một dịch vụ với các tham số nhất định? Trong một câu hỏi khác tôi đã tìm thấy

net bắt đầu tên dịch vụ blah

nhưng nếu tôi thử điều này, netsẽ ném lỗi cú pháp vào tôi.

Tôi đang làm gì sai?

Chỉnh sửa: Để làm rõnet start servicenamehoạt động tốt, nhưng tôi cần truyền tham số cho dịch vụ. Tôi có thể làm điều này bằng tay bằngservices.msccách điền vào một tham số bắt đầu trước khi bắt đầu dịch vụ. Nhưng làm thế nào tôi có thể làm điều này từ một kịch bản?

Một chỉnh sửa khác: Xin lỗi, nhưng câu hỏi của tôi đã gây hiểu nhầm . Trong các thử nghiệm của tôi, tôi có nhiều thông số hơn và đó không phải là/blah net startphàn nàn. Trong thực tế, bất cứ điều gì bắt đầu với một dấu gạch chéo là tốt . Vì vậy,net start servicename /blahlàm việc,net start servicename blahkhông làm việc. Vì tôi cầnnet start servicename /foo bar, đóbarlà vấn đề.

Câu trả lời:


29
sc bắt đầu fooservice arg1 arg2 ...

Tôi không biết làm thế nào tôi có thể bỏ lỡ câu trả lời của bạn sau đó, nhưng tôi chắc chắn rất vui vì tôi đã tìm thấy nó ngay bây giờ (một cách tình cờ). Điều này hoạt động như một sự quyến rũ - ngay cả với các tham số không bắt đầu với /. Cảm ơn rất nhiều!
sbi

Đó là năm 2018 và không "sc start ..." hay "net start ..." dường như hoạt động trong Windows 10. Chỉnh sửa sổ đăng ký hoạt động với serverfault.com/questions/507561/
phỏng

8

NET STARTTôi sẽ không cho phép bạn chuyển các tham số tùy ý theo như tôi biết (có vẻ như chúng phải được thêm tiền tố vào /), tôi tin rằng cách chính xác là sửa đổi khóa đăng ký thích hợp và dừng / khởi động dịch vụ. Giả sử dịch vụ tùy chỉnh của bạn được gọi là MyService:

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

Thực sự, một cách tốt hơn là lưu trữ cấu hình của bạn ở một nơi nào đó mà dịch vụ biết, như có lẽ là hệ thống đăng ký hoặc tệp và đọc bất kỳ giá trị nào bạn cần. Như bạn có thể thấy việc tùy chỉnh dòng lệnh sẽ đau hơn một chút so với nó.

Nếu đây là một dịch vụ do .NET phát triển, bạn có thể tạo n bản sao của tệp thực thi trên hệ thống tệp của mình và mỗi tệp sẽ tự động nhận các tham số từ tệp app.config thích hợp.

Có vẻ như bạn có thể đã bước quá xa ra ngoài hộp Win32. Vì điều này nghe có vẻ như phát triển tùy chỉnh bất kỳ giải pháp được cung cấp nào khác, trong khi có lẽ không phải là lý tưởng của bạn, sẽ hoạt động chính xác và là một cách an toàn hơn để đi.


Ừ Dịch vụ lấy một tập tin cấu hình. Nó sử dụng một tên tệp mặc định hoặc một tên được truyền cho nó. Vì tôi cần hai phiên bản khác nhau của dịch vụ đang chạy, tôi cần trỏ chúng vào các tệp cấu hình khác nhau. Phải loay hoay với registry dường như là một hack rất xấu xí. Có thực sự không có cách nào khác ngoài điều đó (và GUI)?
sbi

Goyuix, xem câu hỏi chỉnh sửa của tôi. net start không chấp nhận tham số, nhưng chỉ những tham số bắt đầu bằng a /.
sbi

Goyuix, bây giờ tôi sử dụng sc.exe. Xem câu trả lời của grawity (mà sau đó tôi bằng cách nào đó đã bỏ lỡ).
sbi

4

Bạn cần một dấu gạch chéo trước mỗi tham số khi sử dụng net start. Cũng đảm bảo trích dẫn các tham số có không gian.

net start servicename /param0 /"param1 with spaces" /"/param2_has_slash"

Nhìn lại vấn đề của tôi. Tôi cũng có các tham số (phải) bắt đầu bằng dấu gạch chéo. Làm thế nào tôi sẽ vượt qua những sau đó?
sbi

Hãy thử điều này: net start tên dịch vụ / "/ foo" / bar
Ngay cả Mien

3

net start servicename /foo cho một đối số

net start servicename /"foo bar" cho một chuỗi hoặc danh sách các đối số

Lưu ý : Câu hỏi này đã 8 tuổi nhưng tôi không có tiếng để nhận xét về câu trả lời được chấp nhận và đây vẫn là kết quả hàng đầu của Google trong năm 2018 vì vậy tôi muốn làm rõ những gì đang hoạt động liên quan đến chỉnh sửa câu hỏi cuối cùng.


Lưu ý: Tôi đã đưa cho bạn một upvote, vì vậy bây giờ câu trả lời của bạn ở vị trí thứ 4 và bạn có một số lỗi. Hãy vui vẻ ở đây! :-)
sbi

1

Bạn cần sử dụng tên dịch vụ thực tế như tên xuất hiện trong bảng điều khiển, dịch vụ. Nếu nó chứa dấu cách, bạn phải đặt dấu ngoặc kép quanh tên dịch vụ.

Để có được tên dịch vụ thực tế, chỉ cần nhập net startmà không có bất kỳ tham số nào trên dấu nhắc lệnh. Nó sẽ cung cấp cho bạn một danh sách tất cả các dịch vụ đang chạy để bạn có thể nhận được tên dịch vụ thực tế. Sau đó chỉ cần sử dụngnet start <servicename>


Robert, đó là một dịch vụ của tôi mà tôi cài đặt và sau đó bắt đầu bằng một kịch bản. Tôi làm net start "my-service-name"tốt Nó net start "my-service-name" /blahcho tôi một thông báo lỗi. Tôi cũng đã thử net start "my-service-name" -blahvà đây cũng là một lỗi cú pháp.
sbi

0

InstSrv và SrvAny có thể hỗ trợ trong việc này không? Hướng dẫn và liên kết


Tôi đã xem xét nó một cách ngắn gọn và tôi không nghĩ như vậy. (Vui lòng sửa lại cho tôi nếu tôi sai.) Tôi có một dịch vụ thực sự có thể thực thi được và chạy tốt. Chỉ là (đối với các bài kiểm tra) Tôi cần cài đặt và khởi động nó từ một tập lệnh và tôi cần truyền tham số cho dịch vụ.
sbi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.