SQLの窓 イラストAC フリー素材

2013年12月20日

PHPでサービス停止( extension=php_com_dotnet.dll )

PHP 5.3.15 / 5.4.5 以降は、php_com_dotnet.dll を php.ini で有効にしておく必要があります。また、WWW サーバが OS にアクセスするユーザの権限が Administrator である必要があり、デスクトップから実行する WWW サーバーでも、『管理者として実行』する必要のある環境もあります(通常はこの方法が必要です)。

以下の php を FORM から method="POST" で呼び出して、サービス名を引き渡すようにすればいいと思います
<?php

$str = "winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2";

$obj = new COM($str);

$ret = $obj->ExecQuery( "Select * from Win32_OperatingSystem" );

print "<PRE>";

foreach( $ret as $key => $target ) {
	print "{$target->Caption}\n";
	print "{$target->CSName}\n";
	print "$target->ServicePackMajorVersion";
	print ".{$target->ServicePackMinorVersion}\n";
	print "{$target->WindowsDirectory}\n";
	print "{$target->SystemDirectory}\n";
}

print "\n";
# **********************************************************
# Spooler ( 停止 )
# **********************************************************
$Query = "select * from Win32_Service where Name = 'Spooler'";
$RunningServices = $obj->ExecQuery($Query);
foreach( $RunningServices as $target ) {
	$ReturnCode = $target->StopService();
	print $ReturnCode;
}

# 終了待ち
$Cnt = 0;
while ( 1 ) {
	sleep( 1 );

	$RunningServices = $obj->ExecQuery($Query);
	foreach( $RunningServices as $target ) {
		$Result = $target->State;
	}

	if ( $Result == "Stopped" ) {
		print " -> Spooler Stopped";
		break;
	}

	$Cnt++;
	if ( $Cnt > 60 ) {
		print " -> Timeout";
		break;
	}

}

print "</PRE>";
print "OK";

?>

▼ 実行結果
Microsoft Windows 7 Professional 
PC名
1.0
C:\Windows
C:\Windows\system32

0 -> Spooler Stopped
OK
※ $ReturnCode が 0以外の場合はエラーです。
【PHPの最新記事】
posted by at 2013-12-20 17:57 | PHP | このブログの読者になる | 更新情報をチェックする