Jump to content

Can not create php window service. win32_start_service seem not to work


duenguyen

Recommended Posts

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();

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.