-
Notifications
You must be signed in to change notification settings - Fork 79
/
Copy pathwin32-start-service-ctrl-dispatcher.xml
220 lines (206 loc) · 7.44 KB
/
win32-start-service-ctrl-dispatcher.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 4d72f13eaf9e06715ae68eac72aa3fd6ae83eb78 Maintainer: takagi Status: ready -->
<!-- Generated by xml_proto.php v2.3. Found in /scripts directory of phpdoc. -->
<!-- Credits: mumumu -->
<refentry xml:id="function.win32-start-service-ctrl-dispatcher" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>win32_start_service_ctrl_dispatcher</refname>
<refpurpose>
スクリプトを SCM に登録し、指定した名前でサービスとして稼動させる
ようにする
</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>void</type><methodname>win32_start_service_ctrl_dispatcher</methodname>
<methodparam><type>string</type><parameter>name</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>gracefulMode</parameter><initializer>true</initializer></methodparam>
</methodsynopsis>
<para>
サービスコントロールマネージャ経由で起動させる際、サービスプロセスは
「チェックイン」を要求され、これによってサービスのモニタリングや
通信の機能を確立します。この関数は、サービスコントロールマネージャとの
低レベル通信を処理するスレッドを生成し、チェックインを実行します。
</para>
<para>
サービスが開始したら、サービスプロセスで行わなければならないことは次のふたつです。
まず最初は、サービスが実行中であることをサービスコントロールマネージャに通知することです。
これは、<function>win32_set_service_status</function> に定数
<constant>WIN32_SERVICE_RUNNING</constant> を指定してコールすれば実現できます。
サービスが実際に動き出すまでに何らかの長い処理を要する場合は、定数
<constant>WIN32_SERVICE_START_PENDING</constant> を使うこともできます。
もうひとつは、常にサービスコントロールマネージャにチェックインし続け、
サービスをいつ終了させるべきかを確認することです。
これは、定期的に <function>win32_get_last_control_message</function>
をコールして戻り値を適切に処理することで実現できます。
</para>
<caution>
<para>
0.2.0 以降では、この関数は "cli" SAPI でのみ動作します。
他の SAPI では、この関数は無効になっています。
</para>
</caution>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>name</parameter></term>
<listitem>
<para>
サービスの短い名前。<function>win32_create_service</function>
で登録されたもの。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>gracefulMode</parameter></term>
<listitem>
<para>
&true; の場合、graceful に終了します。
&false; の場合、エラーで終了します。
詳細は <function>win32_set_service_exit_mode</function> を参照ください。
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.void;
</para>
<para>
バージョン 1.0.0 より前では、&win32service.noerror.false.error;
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
バージョン 1.0.0 より前では、
SAPI が <literal>"cli"</literal> でない場合、
この関数は <constant>E_ERROR</constant> レベルのエラーを発生させていました。
</para>
<para>
バージョン 1.0.0 以降では、
SAPI が <literal>"cli"</literal> でない場合、
<classname>Win32ServiceException</classname> がスローされます。
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>PECL win32service 1.0.0</entry>
<entry>
引数に不正な値があった場合、
<classname>ValueError</classname> をスローするようになりました。
これより前のバージョンでは、&false; を返していました。
</entry>
</row>
<row>
<entry>PECL win32service 1.0.0</entry>
<entry>
エラー時に
<classname>Win32ServiceException</classname> をスローするようになりました。
これより前のバージョンでは、
<link xmlns="http://docbook.org/ns/docbook" linkend="win32service.constants.errors">Win32 エラーコード</link> を返していました。
</entry>
</row>
<row>
<entry>PECL win32service 1.0.0</entry>
<entry>
戻り値の型が <type>void</type> になりました。
これより前のバージョンでは、<type>mixed</type> でした。
</entry>
</row>
<row>
<entry>PECL win32service 0.4.0</entry>
<entry>
<parameter>gracefulMode</parameter> パラメータが追加されました。
</entry>
</row>
<row>
<entry>PECL win32service 0.2.0</entry>
<entry>
この関数は <literal>"cli"</literal> SAPI でのみ動作するようになりました。
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>win32_start_service_ctrl_dispatcher</function> の例</title>
<para>
サービスが SCM で実行されているかどうかを調べます。
</para>
<programlisting role="php">
<![CDATA[
<?php
if (!win32_start_service_ctrl_dispatcher('dummyphp')) {
die("I'm probably not running under the service control manager");
}
win32_set_service_status(WIN32_SERVICE_START_PENDING);
// このサービスを処理するための、何らかの長い処理をします
win32_set_service_status(WIN32_SERVICE_RUNNING);
while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
# ここでなんらかの処理をします。1 回のループに 30 秒以上かからない
# ように心がけてください。
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>win32_set_service_status</function></member>
<member><function>win32_get_last_control_message</function></member>
<member><function>win32_set_service_exit_mode</function></member>
<member><function>win32_set_service_exit_code</function></member>
<member><link linkend="win32service.constants.errors">Win32 エラーコード</link></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->