downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

win32_start_service_ctrl_dispatcher> <win32_query_service_status
Last updated: Fri, 13 Nov 2009

view this page in

win32_set_service_status

(PECL win32service SVN)

win32_set_service_statusサービスの状態を更新する

説明

bool win32_set_service_status ( int $status )

SCM に、実行中のサービスの現在の状態を通知します。 この関数のコールは、現在実行中のサービスについてのみ有効です。

パラメータ

status

以下のステータスコードのうちのひとつ。 WIN32_SERVICE_RUNNINGWIN32_SERVICE_STOPPEDWIN32_SERVICE_STOP_PENDINGWIN32_SERVICE_START_PENDINGWIN32_SERVICE_CONTINUE_PENDINGWIN32_SERVICE_PAUSE_PENDINGWIN32_SERVICE_PAUSED

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。

参考



add a note add a note User Contributed Notes
win32_set_service_status
m dot hald at surfto dot ch
12-May-2008 11:16
On my Machine (Win XP SP2) the function "win32_get_last_control_message" never returns 4 so i will have to reply to 0 also.

finally after mixing several examples i now have a version working woithout filling my event log with errors:

<?php

/*
 * PHP SAMPLE TEMPLATE
 */

/*
 * APP MAIN FUNCTION
 * Called each second after the function last time finished
 * Should not take longer than max 20 seconds to execute
 * ELSE you should call NTServiceResponder(); at least each 20 secs
 * WARNING: NTServiceResponder will exit; if there was a STOP request
 */
function Service_Main()
{
   
// YOU APPLICATION CODE HERE !!!
   
sleep(1); // dummy something
}

/********************************************************************
 *
 * SERVICE CONTROLLING
 *
 ********************************************************************/

$SERVICE_NAME = "phptestservice";
$SERVICE_DISPLAY = "Test Service with PHP";

// so u can get: $SERVICE_PATH_PARTS["dirname"] $SERVICE_PATH_PARTS["basename"]  $SERVICE_PATH_PARTS["extension"]
$SERVICE_PATH_PARTS = pathinfo(__FILE__);

$SERVICE_PARAMS = " run";

    if (!isset(
$argv[1]))
    {
        die(
"this application need to be installed as a service.\n run with param install");
    }

    if (
$argv[1] == 'install')
    {
       
$x = win32_create_service(array(
                                       
'service' => $SERVICE_NAME,
                                       
'display' => $SERVICE_DISPLAY,
                                       
'params' =>  __FILE__ . $SERVICE_PARAMS,
                                       
//'path' =>  $SERVICE_PATH_PARTS["dirname"] . '\php.exe'
                                       
));
       
debug_zval_dump($x);
        exit;
    }
    else if (
$argv[1] == 'uninstall')
    {
       
$x = win32_delete_service('dummyphp');
       
debug_zval_dump($x);
        exit;
    }
    else if (
$argv[1] != 'run')
    {
        die(
"bogus args, needs to run as service");
    }

   
// Connect to service dispatcher and notify that startup was successful
   
if (!win32_start_service_ctrl_dispatcher($SERVICE_NAME)) die('Could not connect to service :'.$SERVICE_NAME);
   
win32_set_service_status(WIN32_SERVICE_RUNNING);

   
// Main Server Loop
   
while (1)
    {
       
NTServiceResponder();

       
// Main script goes here
       
Service_Main();

       
sleep(1); // at least 1 sec delay per loop
   
}
   
win32_set_service_status(WIN32_SERVICE_STOPPED);

/*
 * Response to NTServiceRequests
 */
function NTServiceResponder()
{

    switch (
win32_get_last_control_message())
    {
    case
0: // PATCH for: seems never to go to 4 (WIN32_SERVICE_CONTROL_INTERROGATE)
       
win32_set_service_status(WIN32_SERVICE_RUNNING);
        return
TRUE;
        break;
    case
WIN32_SERVICE_CONTROL_CONTINUE:
        return
TRUE; // "Continue"
   
case WIN32_SERVICE_CONTROL_INTERROGATE:
       
win32_set_service_status(WIN32_SERVICE_RUNNING);
        return
TRUE; // Respond with status
   
case WIN32_SERVICE_CONTROL_STOP:
       
win32_set_service_status(WIN32_SERVICE_STOPPED);
        exit;
// Terminate script
   
default:
       
win32_set_service_status(WIN32_ERROR_CALL_NOT_IMPLEMENTED); // Add more cases to handle other service calls
   
}

    return
FALSE;
}

?>

 
show source | credits | sitemap | contact | advertising | mirror sites