Windowsで特定の開始パラメーターを使用してサービスを開始する方法


17

特定のパラメーターでサービスを開始するにはどうすればよいですか?で別の質問私が発見しました

net start servicename blah

しかし、これを試すとnet、構文エラーがスローされます。

私は何を間違えていますか?

編集:動作を明確にするためにnet start servicenameは問題ありませんが、サービスにパラメーターを渡す必要があります。services.mscサービスを開始する前に開始パラメーターを入力することで、手動でこれを行うことができます。しかし、どのようにスクリプトからこれを行うことができますか?

別の編集:申し訳ありませんが、私の質問は誤解を招くものでした。私のテストでは、さらに多くのパラメーターがありましたが、/blah net start不満はありません。実際、スラッシュで始まるものは何でも構いません。だから、net start servicename /blah作品は、net start servicename blah動作しません。必要なのでnet start servicename /foo bar、それbarが問題です。

回答:


29
sc start fooservice arg1 arg2 ...

当時のあなたの答えをどうやって見逃したかはわかりませんが、今(偶然)見つけたのは確かにとてもうれしいです。これはチャームのように機能します-で始まらないパラメータでも/。どうもありがとう!
sbi

これは、2018年とどちらも「SC開始...」もだ「ネットスタート...」レジストリは仕事ないWindows 10の編集に動作しているようですserverfault.com/questions/507561/...
三月

8

NET START私が知っている限り、任意のパラメータを渡すことはできません(/を前に付ける必要があるようです)、適切なレジストリキーを変更し、サービスを停止/開始することが正しい方法だと思います。カスタムサービスがMyServiceと呼ばれると仮定します。

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

実際には、より良い方法は、レジストリやファイルシステムなど、サービスが知っている場所に構成を保存し、必要な値を読み取ることです。ご覧のとおり、コマンドラインのカスタマイズは、本来あるべきよりも少し苦痛です。

これが偶然.NETで開発されたサービスである場合、ファイルシステムに実行可能ファイルのn個のコピーを作成し、それぞれに適切なapp.configファイルからパラメーターを自動的に取得させることができます。

Win32ボックスの外に出すぎたようです。これはカスタム開発のように聞こえるので、提供される他のソリューションはどれもおそらく理想的ではありませんが、正しく機能し、より安全な方法です。


あー サービスは構成ファイルを受け取ります。デフォルトのファイル名または渡されたファイル名を使用します。サービスの2つの異なるインスタンスを実行する必要があるため、それらを異なる構成ファイルに向ける必要があります。レジストリをいじる必要は、非常にveryいハックのようです。本当にそれ以外の方法はありませんか(およびGUI)?
sbi

Goyuix、編集した質問をご覧ください。net start のパラメーターを受け入れますが、ものだけで始まります/
sbi

Goyuix、私は今使用しますsc.exe。grawityの答えを参照してください(当時はどうにか見逃していました)。
-sbi

4

を使用する場合、パラメーターの前にスラッシュが必要net startです。また、スペースを含むパラメーターを引用符で囲んでください。

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

私の問題をもう一度見てください。スラッシュで始まる(する必要がある)パラメーターもあります。どうすればそれらを渡すことができますか?
sbi

これを試してください:net start servicename / "/ foo" / bar
Mien

3

net start servicename /foo 単一の引数の場合

net start servicename /"foo bar" 文字列または引数のリスト

:この質問は8歳ですが、受け入れられた回答についてコメントする評判はありません。これは2018年のGoogleの最高の結果であるため、質問の最終編集に関して現在何が機能しているかを明確にしたかったのです。


注:私はあなたに賛成票を投じたので、あなたの答えは4位になりました、そしてあなたはいくつかの担当者バンプを得ました。ここで楽しんでください!:-)
sbi

1

コントロールパネルのサービスに表示される実際のサービス名を使用する必要があります。スペースが含まれている場合は、サービス名を引用符で囲む必要があります。

実際のサービス名を取得するnet startには、コマンドプロンプトでパラメーターなしで入力するだけです。実際のサービス名を取得できるように、実行中のすべてのサービスのリストが表示されます。それからちょうど使用net start <servicename>


ロバート、これは私のサービスで、インストールしてからスクリプトで開始します。私はやるnet start "my-service-name"だけの罰金を。それはですnet start "my-service-name" /blah私にエラーメッセージを与えます。私も試しましたがnet start "my-service-name" -blah、これも構文エラーです。
sbi

0

InstSrvとSrvAnyはこれを支援できますか?ガイドとリンク


私はそれを簡単に見てきましたが、そうは思いません。(間違っている場合は修正してください。)実際に実行可能なサービスが正常に実行されています。(テスト用に)スクリプトからインストールして起動する必要があり、パラメーターをサービスに渡す必要があるだけです。
sbi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.