duenguyen Posted November 15, 2013 Share Posted November 15, 2013 i am trying to create php window service in window7 64 bit. I followed the instruction on http://php.net/manual/en/function.win32-create-service.php but it seem not to work for me. The create service did create service just fine. But when I do the start the service did not start and when doing win32_query_service_status I always get stop status. Any pointer would be greatly appreciated. <?php //No timeouts, Flush Content immediatly set_time_limit(0); ob_implicit_flush(); //Service Settings $phpPath = "D:/Zend/ZendServer/bin/"; $ServiceName = 'testscript'; $ServiceDisplay = 'test'; //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); $ServiceStatus = win32_query_service_status($ServiceName); var_dump($ServiceStatus); 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); $cnt = 0; $my_file = 'file.txt'; $handle = fopen($my_file, 'a'); fwrite($handle, "This is a test \n"); fclose($handle); } //Exit if ( $ServiceAction == "run" ) { win32_set_service_status(WIN32_SERVICE_STOPPED); } exit(); Quote Link to comment Share on other sites More sharing options...
requinix Posted November 16, 2013 Share Posted November 16, 2013 Are you able to start the service manually? Have you verified that it installed with the correct information? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.