そのため、次のように Windows 7 サービスのステータスにアクセスするために PHP 関数を呼び出しています。
win32_query_service_status($service_name);
ローカルにインストールされた WAMP インスタンスで実行すると、関数は予想どおり情報の配列を返します。
IIS で実行すると、エラー ステータス 5 が返されます。ドキュメントによると、これは次のエラーに対応します。
WIN32_ERROR_ACCESS_DENIED 0x00000005
The handle to the SCM database does not have the appropriate access rights.
ということで、PHP環境が動いているUSERNAMEphpinfo()
を調べてみました。WAMP サイトでは、サービスは私のユーザー ID (Windows ローカル管理者グループに属している) で実行されています。
IIS バージョンでは、ユーザーはF6729-44TP6S7$
(私のコンピューターの名前の後に が続く$
) です。おそらく、解決策は、Windows のサービス コントロール マネージャー (SCM) で必要な特権をこのユーザーに付与することです。
ただし、問題は、IIS (または Windows) の内部動作について、このユーザー ID がどこから来たのかを知るのに十分な知識がないことです (つまり、必要な特権を付与する方法がわからないということです)。ユーザーがコンピュータ管理コンソールに存在せず、IIS 管理ツールで定義されている場所も見つかりません。
問題は、この PHP 関数を IIS で実行できるようにするには、何をする必要があるかということです。IIS の下で PHP マネージャーに必要な権限を付与するにはどうすればよいですか。あるいは、PHP マネージャーを実行するユーザー ID を変更するにはどうすればよいですか?