Other start_type values:
0x00000002: A service started automatically by the service control manager during system startup. For more information, see Automatically Starting Services.
0x00000000: A device driver started by the system loader. This value is valid only for driver services.
0x00000003: A service started by the service control manager when a process calls the win32_start_service() function.
0x00000004: A service that cannot be started. Attempts to start the service result in the error code
0x00000001: A device driver started by the IoInitSystem function. This value is valid only for driver services.
I can confirm that 0x00000003 works as expected (service is created, but must be started manually).
More here:
http://msdn2.microsoft.com/en-us/library/ms682450.aspxwin32_create_service
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
win32_create_service
Референца за `function.win32-create-service.php` со подобрена типографија и навигација.
win32_create_service
(PECL win32service >=0.1.0)
win32_create_service — Креира нов запис за услуга во базата на податоци на SCM
= NULL
Се обидува да додаде услуга во базата на податоци на SCM. Потребни се администраторски привилегии за да успее ова.
Параметри
details-
Низа од детали за услугата:
service-
Краткото име на услугата. Ова е името што ќе го користите за контрола на услугата користејќи ја командата. Услугата мора да биде единствена (ниту две услуги не можат да споделат исто име), и, идеално, треба да се избегнуваат празни места во името.
netИмето за прикажување на услугата. Ова е името што ќе го видите во Аплетот за услуги. display-
Долгиот опис на услугата. Ова е описот што ќе го видите во Аплетот за услуги.
description-
Името на корисничката сметка под која сакате да работи услугата. Ако е изоставено, услугата ќе работи како сметката LocalSystem. Ако е наведено корисничкото име, мора да обезбедите и лозинка.
user-
Лозинката што одговара на
password-
Целосната патека до извршниот модул што ќе се стартува кога ќе се стартува услугата. Ако е изоставено, ќе се користи патеката до тековниот PHP процес.
user. path-
Параметри на командната линија што треба да се предадат на услугата кога ќе се стартува. Ако сакате да извршите PHP скрипта како услуга, тогаш првиот параметар треба да биде целосната патека до PHP скриптата што имате намера да ја извршите. Ако името или патеката на скриптата содржи празни места, тогаш заокружете ја целосната патека до PHP скриптата со
params-
Ја контролира нарачката за вчитување. Ова сè уште не е целосно поддржано.
". load_order-
Го поставува типот на услугата. Ако е изоставено, стандардната вредност е. Не менувајте го ова освен ако не знаете што правите.
svc_type-
Специфицира како треба да се стартува услугата. Стандардно е, што значи дека услугата ќе се стартува кога машината ќе се вклучи.
WIN32_SERVICE_WIN32_OWN_PROCESSГо информира SCM што треба да направи кога ќе открие проблем со услугата. Стандардно е. Промената на оваа вредност сè уште не е целосно поддржана. start_type-
, тогаш ова ќе го информира SCM дека оваа услуга треба да се стартува по другите услуги за автоматско стартување плус кратка пауза.
WIN32_SERVICE_AUTO_STARTwhich means the service will be launched when the machine starts up. error_control-
Informs the SCM what it should do when it detects a problem with the service. The default is
WIN32_SERVER_ERROR_IGNORE. Changing this value is not yet fully supported. delayed_start-
Враќа
delayed_startе поставен наtrue, then this will inform the SCM that this service should be started after other auto-start services are started plus a short delay.Секоја услуга може да биде означена како услуга со одложено автоматско стартување; сепак, оваа поставка нема ефект освен ако услугата не е
start_typeisWIN32_SERVICE_AUTO_START.Оваа поставка е применлива само на Windows Vista и Windows Server 2008 или понова верзија.
base_priority-
За да се намали влијанието врз искористеноста на процесорот, можеби ќе биде потребно да се постави основен приоритет понизок од нормалниот.
На
base_priorityможе да се постави на една од константите дефинирани во Услугата врати код за грешка специфичен за услугата.. dependencies-
За да ги дефинирате зависностите за вашата услуга, можеби ќе биде потребно да го поставите овој параметар на списокот со имињата на услугите во низа.
recovery_delay-
Овој параметар ја дефинира паузата помеѓу откажувањето и извршувањето на акцијата за опоравување. Вредноста е во милисекунди.
Стандардната вредност е 60000.
recovery_action_1-
Акцијата ќе се изврши при првото откажување. Стандардната вредност е
WIN32_SC_ACTION_NONE.На
recovery_action_1може да се постави на една од константите дефинирани во Процес што го има највисокиот можен приоритет. Нишките на процесот ги преземаат нишките на сите други процеси, вклучувајќи ги и процесите на оперативниот систем што извршуваат важни задачи. На пример, процес во реално време што работи повеќе од многу краток интервал може да предизвика кешот на дискот да не се испразни или да предизвика глувчето да не реагира.. recovery_action_2-
Акцијата ќе се изврши при второто откажување. Стандардната вредност е
WIN32_SC_ACTION_NONE.На
recovery_action_2може да се постави на една од константите дефинирани во Процес што го има највисокиот можен приоритет. Нишките на процесот ги преземаат нишките на сите други процеси, вклучувајќи ги и процесите на оперативниот систем што извршуваат важни задачи. На пример, процес во реално време што работи повеќе од многу краток интервал може да предизвика кешот на дискот да не се испразни или да предизвика глувчето да не реагира.. recovery_action_3-
Акцијата ќе се изврши при следните откажувања. Стандардната вредност е
WIN32_SC_ACTION_NONE.На
recovery_action_3може да се постави на една од константите дефинирани во Процес што го има највисокиот можен приоритет. Нишките на процесот ги преземаат нишките на сите други процеси, вклучувајќи ги и процесите на оперативниот систем што извршуваат важни задачи. На пример, процес во реално време што работи повеќе од многу краток интервал може да предизвика кешот на дискот да не се испразни или да предизвика глувчето да не реагира.. recovery_reset_period-
Бројачот на откажувања ќе се ресетира по паузата дефинирана во параметарот. Паузата е во секунди.
Стандардната вредност е
86400. recovery_enabled-
Поставете го овој параметар на
trueза да ги овозможите поставките за опоравување,falseза да се оневозможи.Стандардната вредност е
false recovery_reboot_msg-
Поставете го овој параметар за да ја дефинирате пораката зачувана во Windows Event Log пред рестартирањето. Се користи само ако една акција е поставена на
WIN32_SC_ACTION_REBOOT. recovery_command-
Поставете го овој параметар за да ја дефинирате командата извршена кога една акција е дефинирана на
WIN32_SC_ACTION_RUN_COMMAND.
machine-
Име на услугата за читање права за пристап.
Вратени вредности
Не се враќа вредност.
Пред верзија 1.0.0, вратено WIN32_NO_ERROR при успех, false ако има проблем со параметрите или а Изборно име на машина. Ако е изоставено, се користи локалната машина. при неуспех.
Errors/Exceptions
А ValueError се фрла ако вредноста на service Врати
А ValueError се фрла ако вредноста на path параметарот недостасува или е празен.
А ValueError се фрла ако вредноста на svc_type параметарот е погрешен.
А ValueError се фрла ако вредноста на start_type параметарот е погрешен.
А ValueError се фрла ако вредноста на error_control параметарот е погрешен.
А ValueError се фрла ако вредноста на base_priority параметарот е погрешен.
А ValueError се фрла ако вредноста на recovery_delay параметарот не е помеѓу 0 и PHP_INT_MAX.
А ValueError се фрла ако вредноста на recovery_action_1 параметарот е погрешен.
А ValueError се фрла ако вредноста на recovery_action_2 параметарот е погрешен.
А ValueError се фрла ако вредноста на recovery_action_3 параметарот е погрешен.
А ValueError се фрла ако вредноста на recovery_reset_period параметарот не е помеѓу 0 и PHP_INT_MAX.
А Win32ServiceException параметарот е празен.
Дневник на промени
| Верзија | = NULL |
|---|---|
| Код за грешка на Win32 |
Фрла ValueError на невалидни податоци во параметрите, претходно false .
|
| Код за грешка на Win32 | Фрла Win32ServiceException на грешка, претходно а Изборно име на машина. Ако е изоставено, се користи локалната машина. . |
| Код за грешка на Win32 | Типот на враќање сега е void, претходно беше mixed. |
| PECL win32service 0.4.0 |
На dependencies, recovery_delay,
recovery_action_1, recovery_action_2,
recovery_action_3, recovery_reset_period,
recovery_enabled, recovery_reboot_msg
and recovery_command се додадени параметри.
|
Примери
ако е овозможен колекторот за отпадоци, win32_create_service() example
Креирај услуга со краток назив 'dummyphp'.
<?php
$x = win32_create_service(array(
'service' => 'dummyphp', // the name of your service
'display' => 'sample dummy PHP service', // short description
'description' => 'This is a dummy Windows service created using PHP.', // long description
'params' => '"' . __FILE__ . '" run', // path to the script and parameters
));
debug_zval_dump($x);
?>
пример кој покажува употреба на некои знаменца win32_create_service() пример со зависности
Креирај услуга со краток назив 'dummyphp' и зависности.
<?php
$x = win32_create_service(array(
'service' => 'dummyphp', // the name of your service
'display' => 'sample dummy PHP service', // short description
'description' => 'This is a dummy Windows service created using PHP.', // long description
'params' => '"' . __FILE__ . '" run', // path to the script and parameters
'dependencies' => array("Netman"), // The list of the dependencies
));
debug_zval_dump($x);
?>
Пример #3 А win32_create_service() пример со обновување
Креирај услуга со краток назив 'dummyphp' и поставки за обновување.
<?php
$x = win32_create_service(array(
'service' => 'dummyphp', // the name of your service
'display' => 'sample dummy PHP service', // short description
'description' => 'This is a dummy Windows service created using PHP.', // long description
'params' => '"' . __FILE__ . '" run', // path to the script and parameters
'recovery_delay' => 120000, // Recovery action is executed after 2 minutes
'recovery_action_1' => WIN32_SC_ACTION_RESTART, // On first failure, restart the service
'recovery_action_2' => WIN32_SC_ACTION_RUN_COMMAND, // On second failure, execute the commmand
'recovery_action_3' => WIN32_SC_ACTION_NONE, // On other failure, do nothing
'recovery_reset_period' => 86400, // Reset the fail counter after 1 day
'recovery_enabled' => true, // Enable the recovery parameter
'recovery_reboot_msg' => null, // Do not define a reboot message, it's not needed here
'recovery_command' => "c:\clean-service.bat", // When the action is WIN32_SC_ACTION_RUN_COMMAND, execute this command
));
debug_zval_dump($x);
?>Види Исто така
- win32_delete_service() - Брише запис за услуга од SCM базата на податоци
- Услугата врати код за грешка специфичен за услугата.
- Процес што го има највисокиот можен приоритет. Нишките на процесот ги преземаат нишките на сите други процеси, вклучувајќи ги и процесите на оперативниот систем што извршуваат важни задачи. На пример, процес во реално време што работи повеќе од многу краток интервал може да предизвика кешот на дискот да не се испразни или да предизвика глувчето да не реагира.
- Кодови за грешки Win32
Белешки од корисници 2 забелешки
[An example of how to create a Windows service. Evaluate code first and use at your own risk!]
<?php
//No timeouts, Flush Content immediatly
set_time_limit(0);
ob_implicit_flush();
//Service Settings
$phpPath = "D:\\php\\php5.2.9";
$ServiceName = 'phpServiceName';
$ServiceDisplay = 'phpDisplayName';
//Windows Service Control
$ServiceAction = "status";
//$ServiceAction = "debug";
if ( isset($_GET['ServiceAction']) and strlen($_GET['ServiceAction']) ) {
$ServiceAction = addslashes($_GET['ServiceAction']);
} else if ( isset($argv) and isset($argv[1]) and strlen($argv[1]) ) {
$ServiceAction = $argv[1];
}
if( $ServiceAction == "status" ) {
$ServiceStatus = win32_query_service_status($ServiceName);
if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_STOPPED ) {
echo "Service Stopped\n\n";
} else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_START_PENDING ) {
echo "Service Start Pending\n\n";
} else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_STOP_PENDING ) {
echo "Service Stop Pending\n\n";
} else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_RUNNING ) {
echo "Service Running\n\n";
} else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_CONTINUE_PENDING ) {
echo "Service Continue Pending\n\n";
} else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_PAUSE_PENDING ) {
echo "Service Pause Pending\n\n";
} else if ( $ServiceStatus['CurrentState'] == WIN32_SERVICE_PAUSED ) {
echo "Service Paused\n\n";
} else{
echo "Service Unknown\n\n";
}
exit;
} else if ( $ServiceAction == "install" ) {
//Install Windows Service
win32_create_service( Array(
'service' => $ServiceName,
'display' => $ServiceDisplay,
'params' => __FILE__ . " run",
'path' => $phpPath."\\php.exe",
));
echo "Service Installed\n\n";
exit;
} else if ( $ServiceAction == "uninstall" ) {
//Remove Windows Service
win32_delete_service($ServiceName);
echo "Service Removed\n\n";
exit;
} else if( $ServiceAction == "start") {
//Start Windows Service
win32_start_service($ServiceName);
echo "Service Started\n\n";
exit;
} else if( $ServiceAction == "stop" ) {
//Stop Windows Service
win32_stop_service($ServiceName);
echo "Service Stopped\n\n";
exit;
} else if ( $ServiceAction == "run" ) {
//Run Windows Service
win32_start_service_ctrl_dispatcher($ServiceName);
win32_set_service_status(WIN32_SERVICE_RUNNING);
} else if ( $ServiceAction == "debug" ) {
//Debug Windows Service
set_time_limit(10);
} else {
exit();
}
//Server Loop
while (1) {
//Handle Windows Service Request
usleep(100*1000);
if ( $ServiceAction == "run" ) {
switch ( win32_get_last_control_message() ) {
case WIN32_SERVICE_CONTROL_CONTINUE:
break;
case WIN32_SERVICE_CONTROL_INTERROGATE:
win32_set_service_status(WIN32_NO_ERROR);
break;
case WIN32_SERVICE_CONTROL_STOP:
win32_set_service_status(WIN32_SERVICE_STOPPED);
exit;
default:
win32_set_service_status(WIN32_ERROR_CALL_NOT_IMPLEMENTED);
}
}
//User Loop
sleep(1);
echo "\n<BR>YOUR CODE HERE";
}
//Exit
if ( $ServiceAction == "run" ) {
win32_set_service_status(WIN32_SERVICE_STOPPED);
}
exit();
?>