web-dev-qa-db-ja.com

各起動ではなくインストール時に一度にすべてのパラメーターをWindowsサービスに渡す方法

次のようなコマンドラインパラメータを受け入れることができるWindowsサービスアプリケーションがあります。

MyService -option 

これまでのところ、パラメーターを指定してサービスを開始する場合は、[サービスのプロパティ]ダイアログ([開始パラメーター]ボックス内)から手動で実行するか、次のコマンドを使用します。

sc start MyService -option  

このパラメーターを使用してサービスを「永久に」インストールするにする方法です。ユーザーは毎回パラメーターを設定する必要なく、サービスを開始/停止する必要があります

ところで、ImagePathレジストリエントリにパラメータを追加しても機能せず、次のようにインストールすることもできません。

MyService -option /install

更新:これまでの回答に感謝します。質問を絞り込むのに役立ちます。
私が達成したいのは、同じ実行可能ファイルに複数のサービスがある場合に備えて、パラメーターをサービスレベル自体(プロパティのように)に設定することです。 binpath configオプションは、レジストリのImagePathエントリを更新するだけです。サービス固有にすることはできません。

19
François
sc config MyService binPath= MyService.exe -option

更新

個々のサービスパラメータは、レジストリのキーHKLM\SYSTEM\CurrentControlSet\Services\<serviceName>\Parametersに格納されています。パラメータがサービスにどのように渡されるかはわかりません。 IbelieveSCMはこれらの値を読み取り、次に StartService を呼び出すと、それらを ServiceMainに渡します コールバック。

12
Remus Rusanu

パラメータを構成ファイルに入れてみませんか?

6
Raj More

ServiceBase.OnStart ドキュメントによると:

コンソールに入力された引数は保存されません。これらは、サービスがコントロールパネルから開始されたときに一度だけサービスに渡されます。サービスが自動的に開始されるときに存在する必要がある引数は、サービスのレジストリキー(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services \)のImagePath文字列値に配置できます。 GetCommandLineArgsメソッドを使用して、レジストリから引数を取得できます。例:string [] imagePathArgs = Environment.GetCommandLineArgs();。

2

ImagePathを介してコマンドラインで渡される引数には、main()またはGetCommandLine()を介してアクセスできます。コマンドライン引数を使用してインストールしてから、ServiceMainで、lpszArgsパラメータに引数が渡されているかどうかを確認します。そうでない場合は、GetCommandLineを呼び出して、その方法で渡されたものがないか確認します。

1
Dustin

Powershellはこれを実行できますが、それを実現するには.Netを使用する必要があります。

new-Object System.ServiceProcess.ServiceController("$ServiceName",$ComputerName)).Start("$Parameter")
1
virgored

同じ実行可能ファイルを持つサービスが複数ある場合は、それらを異なるサービス名でインストールします。パラメータの代わりにサービス名を参照できます。

サービス名を取得するには、これを使用できます WindowsサービスはどのようにしてServiceNameを決定できますか?

0
timothy

SC(サービス制御)コマンドを使用します。これは、単に開始および停止するよりも多くのオプションを提供します。

DESCRIPTION:
          SC is a command line program used for communicating with the
          NT Service Controller and services.
  USAGE:
      sc <server> [command] [service name]  ...

      The option <server> has the form "\\ServerName"
      Further, help on commands can be obtained by typing: "sc [command]"
      Commands:
        query-----------Queries the status for a service, or
                        enumerates the status for types of services.
        queryex---------Queries the extended status for a service, or
                        enumerates the status for types of services.
        start-----------Starts a service.
        pause-----------Sends a PAUSE control request to a service.
        interrogate-----Sends an INTERROGATE control request to a service.
        continue--------Sends a CONTINUE control request to a service.
        stop------------Sends a STOP request to a service.
        config----------Changes the configuration of a service (persistent).
        description-----Changes the description of a service.
        failure---------Changes the actions taken by a service upon failure.
        qc--------------Queries the configuration information for a service.
        qdescription----Queries the description for a service.
        qfailure--------Queries the actions taken by a service upon failure.
        delete----------Deletes a service (from the registry).
        create----------Creates a service. (adds it to the registry).
        control---------Sends a control to a service.
        sdshow----------Displays a service's security descriptor.
        sdset-----------Sets a service's security descriptor.
        GetDisplayName--Gets the DisplayName for a service.
        GetKeyName------Gets the ServiceKeyName for a service.
        EnumDepend------Enumerates Service Dependencies.

      The following commands don't require a service name:
      sc <server> <command> <option>
        boot------------(ok | bad) Indicates whether the last boot should
                        be saved as the last-known-good boot configuration
        Lock------------Locks the Service Database
        QueryLock-------Queries the LockStatus for the SCManager Database
  EXAMPLE:
          sc start MyService
0
Tejas Bagade

次の画像のように、レジストリーのImagePathにパラメーターを追加することだけが機能しました: enter image description here

0
gatsby