1

Windows Server 2008 SP1 マシンで PHP Web アプリケーションをセットアップしようとしています。このアプリケーションは Windows Server 2003 で正しく実行されていますが、php_win32servicePHP拡張機能で構築された Windows サービスを正しく起動できません。

コードの関連セクションを次に示しPHPます。インストールとアンインストールを行うセクションは次のとおりです。

if ($argv[1] == 'install') {
    win32_create_service(array(
        'service' => $service_name,
        'display' => $service_name,
        'params' => '"'. __FILE__ . '"' . ' run'));
        exit;
} 
else if ($argv[1] == 'uninstall') {
    win32_delete_service($service_name);
    exit;
} 
else if ($argv[1] != 'run') {
   die("Invalid arguments");
}

win32_start_service_ctrl_dispatcher($service_name);

そして、ここにメインループがあります:

while (1) {
    switch (win32_get_last_control_message()) {
       case WIN32_SERVICE_CONTROL_INTERROGATE: win32_set_service_status(WIN32_SERVICE_RUNNING); break; // Respond with status
       case WIN32_SERVICE_CONTROL_STOP: win32_set_service_status(WIN32_SERVICE_STOPPED);  exit; // Terminate script
    }         
    processQueue();
    usleep(500000);
}

管理者として実行している限り、インストールとアンインストールは機能しcmdます。cmdサーバーへのログインに使用するアカウントで起動すると、サービスが作成されませんwin32_create_service。コマンドラインからパラメーターを指定してスクリプトを実行することもできますが、スクリプトrunは正しく実行されますが、サービスを開始しようとすると、Startingメッセージが表示されたままハングアップし、Started状態になりません。

この問題は、マシン上のアカウントの権限と関係があると思いますが、LocalSystemこれを適切に機能させるために必要な権限がわかりません。WIN32_SERVICE_CONTROL_INTERROGATEまた、特にこのサーバーでセキュリティ設定を変更する権限がないため、これをデバッグして で発生しているエラー/問題を見つける方法もわかりません。セキュリティ設定を変更する必要がある場合は、ネットワーク管理者が変更を実行できるように、ネットワーク管理者に連絡する必要があります。この問題のデバッグまたは解決について誰か助けてもらえますか?

アップデート:

この問題は の 64 ビット バージョンでのみ発生するようですPHP。サービスを開始しようとすると、 の 64 ビット コンパイルでphp_win32service何らかの問題が発生するようです。「php_win32service」の 64 ビット バージョンを削除PHPし、32 ビット バージョンに置き換えました。その後、サービスは正しく開始されました。

4

2 に答える 2

1

NetworkService アカウントで試しましたか? もう 1 つの方法は、独自のサービス アカウントを作成することです。サーバーの外で通信しますか? もしかしてファイアウォール?

Ps。ネットワーク サービス アカウントにはデフォルトのパスワードがあります (システムは既知)

このアカウントにはパスワードがないため、この呼び出しで提供するパスワード情報は無視されることに注意してください。

http://msdn.microsoft.com/nl-nl/library/windows/desktop/ms684272(v=vs.85).aspx

于 2013-03-21T13:43:37.767 に答える