ServiceInstall テーブル
ServiceInstall テーブルは、サービスのインストールに使用され、次の列があります。
Column | 種類 | キー | Nullable |
---|---|---|---|
ServiceInstall | Identifier | Y | N |
名前 | Formatted | N | N |
DisplayName | 書式設定済み | N | Y |
ServiceType | DoubleInteger | N | N |
StartType | DoubleInteger | N | N |
ErrorControl | DoubleInteger | N | N |
LoadOrderGroup | 書式設定済み | N | Y |
依存関係 | 書式設定済み | N | Y |
StartName | 書式設定済み | N | Y |
パスワード | 書式設定済み | N | Y |
引数 | Formatted | N | Y |
Component_ | Identifier | N | N |
説明 | Formatted | N | Y |
[列]
-
ServiceInstall
-
これはテーブルの主キーです。
-
Name
-
この列は、インストールするサービス名を示す文字列です。 この文字列の長さは最大 256 文字です。 サービス コントロール マネージャー データベースでは、サービス名に含まれる大文字と小文字が保持されますが、サービス名の比較では大文字と小文字が区別されません。 サービス名の文字に、スラッシュ (/) とバックスラッシュ (\) を使用することはできません。
-
DisplayName
-
この列は、ユーザー インターフェイス プログラムでサービスを識別するために使用されるローカライズ可能な文字列です。 この文字列の長さは最大 256 文字です。 サービス コントロール マネージャーでは表示名の大文字と小文字が区別されますが、表示名の比較では大文字と小文字が区別されません。
-
ServiceType
-
この列は、サービスの種類を指定するビット フラグのセットです。 この列には、次のサービスの種類のいずれかを指定する必要があります。
サービスの種類 値 説明 SERVICE_WIN32_OWN_PROCESS 0x00000010 独自のプロセスを実行する Microsoft Win32 サービス。 SERVICE_WIN32_SHARE_PROCESS 0x00000020 プロセスを共有する Win32 サービス。 SERVICE_INTERACTIVE_PROCESS 0x00000100 デスクトップと対話する Win32 サービス。 この値を単独で使用することはできず、前述した 2 つの種類のいずれかに追加する必要があります。このフラグを使用する場合は、StartName 列を LocalSystem または null に設定する必要があります。 次の種類のサービスはサポートされていません。
サービスの種類 値 説明 SERVICE_KERNEL_DRIVER 0x00000001 ドライバー サービス。 SERVICE_FILE_SYSTEM_DRIVER 0x00000002 ファイル システムのドライバー サービス。 -
StartType
-
この列は、サービスを起動するタイミングを指定するビット フラグのセットです。 この列には、次のいずれかの種類のサービス起動を指定する必要があります。
サービス起動の種類 値 説明 SERVICE_AUTO_START 0x00000002 システムのスタートアップ時にサービスが起動されます。 SERVICE_DEMAND_START 0x00000003 サービス コントロール マネージャーが StartService 関数を呼び出すと、サービスが起動されます。 SERVICE_DISABLED 0x00000004 起動できなくなったサービスを指定します。 Windows インストーラーでは、SERVICE_BOOT_START オプションと SERVICE_SYSTEM_START オプションを使用できません。
-
ErrorControl
-
この列は、スタートアップ時にサービスの起動に失敗した場合にスタートアップ プログラムで実行するアクションを指定します。 これらの値は、インストールされているサービスの ServiceControl StartService イベントに影響します。 この列には、次のいずれかのエラー制御フラグを指定する必要があります。
定数 msidbServiceInstallErrorControlVital (値 = 0x08000) を次の表のフラグに追加すると、該当サービスをシステムにインストールできない場合にインストール全体が失敗するように指定できます。
エラー制御フラグ 値 スタートアップ プログラムのアクション SERVICE_ERROR_IGNORE 0x00000000 エラーをログに記録し、スタートアップ操作を続行します。 SERVICE_ERROR_NORMAL 0x00000001 エラーをログに記録し、メッセージ ボックスを表示し、スタートアップ操作を続行します。 SERVICE_ERROR_CRITICAL 0x00000003 可能であればエラーをログに記録し、正常であることが判明している最後の構成でシステムを再起動します。 最後に確認された正常な構成が現在起動しているものである場合、スタートアップ操作は失敗します。 -
LoadOrderGroup
-
この列には、このサービスが属するロード オーダー グループの名前となる文字列が入ります。 サービスがグループに属していない場合は、null または空の文字列を指定します。
-
Dependencies
-
この列は、このサービスの前に起動しておく必要があるサービス名またはロード オーダー グループの一覧です。 リスト内の名前は、null で区切ります。 サービスに依存関係がない場合は、null または空の文字列を指定します。 null は、構文 [~] を使用して挿入します。 グループへの依存関係があるサービスとは、グループのすべてのメンバーを起動しようとした際、そのグループの少なくとも 1 つのメンバーが実行されないと、このサービスを実行できないことを意味します。
たとえば、ServiceInstall 列に記載されたサービスを起動する前に、システムで service1 と service2 を起動することを要求するには、Dependencies 列に「service1[~]service2[~][~]」と入力します。 識別子 service1 と service2 は、テーブルの主キーに存在するか、既にインストールされているサービスの名前である必要があります。
サービス名と区別できるように、グループ名の前に + を付ける必要があります。 ServiceInstall 列にリストされているサービスを起動する前に、システムに service1 とオーダー グループ MyGroup の少なくとも 1 つのメンバーを起動することを要求するには、「service1[~]+MyGroup[~][~]」と入力します。
-
StartName
-
サービスは、この列の文字列によって指定された名前としてログオンします。 サービスの種類が SERVICE_WIN32_OWN_PROCESS の場合は、DomainName\UserName という形式でアカウント名を使用します。 アカウントが組み込みドメインに属している場合は、.\UserName を指定できます。 サービスの種類が SERVICE_WIN32_SHARE_PROCESS または SERVICE_INTERACTIVE_PROCESS である場合は、LocalSystem アカウントを使用する必要があります。 StartName が null として指定されており、それによってほとんどのサービスのこの列が空白のままになっている場合、CreateService 関数には LocalSystem アカウントが使用されます。
-
Password
-
この文字列は、StartName 列で指定したアカウント名のパスワードです。 ユーザーがサービスとしてログオンするには、アクセス許可が必要であることに注意してください。 StartName が null または空の文字列の場合、そのサービスにパスワードはありません。 LocalSystem の Startname は null であるため、このインスタンスのパスワードは null であり、ほとんどのサービスにおいて、この列は空白のままになります。
ユーザー名とパスワードを使用してインストールされたサービスを削除した場合、インストーラーで最初にパスワードを取得するカスタム アクションを使用しない限り、サービスをロールバックできないことに注意してください。 インストーラーは、サービスに関するすべての必要な情報を取得できますが、システムの保護された部分に格納されているパスワードは除きます。 カスタム アクションでパスワードを取得するには、ユーザーにメッセージを表示するか、データベースからプロパティを読み取るか、ファイルを読み取ります。 その後、サービスを再インストールする前に、カスタム アクションで ChangeServiceConfig を呼び出してパスワードを指定する必要があります。
Windows インストーラーでは、Password フィールドに入力した値はログ ファイルに書き込まれません。
-
Arguments
-
この列には、サービスの実行に必要なコマンド ライン引数またはプロパティが入ります。
-
Component_
-
Component テーブルの列 1 の外部キー。 InstallService テーブルを使用してこのサービスをインストールするには、このコンポーネントの KeyPath がサービスの実行可能ファイルである必要があることに注意してください。
-
Description
-
この列には、現在構成しているサービスのローカライズ可能な説明が入ります。 この列を空白のままにすると、サービスの既存の説明 (存在する場合) が使用されます。 詳細については、Microsoft Windows ソフトウェア開発キット (SDK) の SERVICE_DESCRIPTION を参照してください。 既存の説明を消去するには、この列に「[~]」と入力します。 これにより、新規または既存のサービスの説明が空白になります。
解説
"シーケンス テーブル" の InstallServices アクションは、このテーブルの情報を処理します。 シーケンス テーブルの使用方法については、シーケンス テーブルの使用に関するページを参照してください。
このテーブルには、Win32 CreateService 関数のほとんどのパラメーターが含まれています。
ユーザー インターフェイスを使用して、サービスをソースからの実行としてインストールするように指定することはできますが、実際には、この種類のインストールはインストーラーでサポートされていません。 ローカル システムの特権レベルで実行されるサービスは、ローカル ハード ドライブから実行するようにインストールする必要があります。 セキュリティ データがログまたはシステム レジストリに書き込まれる可能性があるため、特定のユーザーの特権を借用するサービスをインストールしないでください。 これにより、セキュリティの問題、パスワードの競合、システムの再起動時の構成データの損失が発生する可能性があります。
アンインストール中にサービスを削除するには、ServiceControl テーブルにそのサービスに対応するレコードが存在し、Event 列に msidbServiceControlEventUninstallDelete フラグが表示されている必要があります。 ServiceControl テーブルにこのエントリがない場合、ServiceInstall テーブルにサービスが入力されていても、インストーラーによるアンインストール時に削除されません。
サービスをセキュリティで保護する方法については、MsiLockPermissionsEx Table に関するページを参照してください。
検証