@echo off
rem //------------------------------------------------------------------------------
rem // リモートマイクロ交換(Setup Installer)サイレントアップデートバッチファイル
rem //------------------------------------------------------------------------------
cd /d %~dp0

rem トレースファイル格納先作成
set TRACEDIR=%SystemDrive%\SetupTrace
if not exist %TRACEDIR% (
	mkdir %TRACEDIR%
)

rem エラーコードファイルの一時出力先
set ERRCODEFILE=%TRACEDIR%\ErrorCode.log
rem 応答ファイル
set ISSFILEPATH=..\..\Setup2K\update.iss
set INSDIR=nul
set ELEVATED=no
set REGTMP=%TRACEDIR%\regtmp.txt
set DLLRENAME=no

rem 以前のログファイル削除（トレースフォルダ内）
if exist %ERRCODEFILE% (
	del %ERRCODEFILE%
)

rem --------------- 管理者権限チェック ---------------
for /f "tokens=1 delims=," %%i in ('whoami /groups /FO CSV /NH') do (
	if "%%~i"=="Mandatory Label\High Mandatory Level" set ELEVATED=yes
	if "%%~i"=="Mandatory Label\System Mandatory Level" set ELEVATED=yes
)
 
if "%ELEVATED%" neq "yes" (
	rem 管理者権限で実行されていない。
	call :createErrorCodeFile 200036
	goto installend
)

rem --------------- インストールチェック ---------------
set ValueName=Install_Root
rem 32bit OSのレジストリチェック
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Hitachi\HM_RAID" /v "%ValueName%" > %REGTMP% 2>&1
for /f "tokens=1,2*" %%i in (%REGTMP%) DO (
	if "%%i"=="%ValueName%" (
		set INSDIR=%%k
		goto :break1
	)
)
:break1
del %REGTMP%

if %INSDIR% equ nul (
	rem 64bit OSのレジストリチェック
	reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Hitachi\HM_RAID" /v "%ValueName%" > %REGTMP% 2>&1
	for /f "tokens=1,2*" %%i in (%REGTMP%) DO (
		if "%%i"=="%ValueName%" (
			set INSDIR=%%k
			goto :break2
		)
	)
:break2
	del %REGTMP%

	if %INSDIR% equ nul (
		rem インストールされていない。
		call :createErrorCodeFile 200041
		goto installend
	)
)
rem Setup.logファイルの出力先
set SETUPLOG=%INSDIR%\wk\supervisor\setup\log\setup.log

rem --------------- 起動パラメータチェック ---------------
if "%~1" neq "" (
	rem 起動パラメータ不正
	call :createErrorCodeFile 200043
	goto installend
)


rem --------------- 応答ファイルのチェック ---------------
if not exist %ISSFILEPATH% (
	rem 応答ファイルがありません。
	call :createErrorCodeFile 200039
	goto installend
)

rem find "[InstallShield Silent]" %ISSFILEPATH% > nul 2>&1
rem if "%errorlevel%" neq "0" (
rem 	rem 応答ファイルが不正です。
rem 	call :createErrorCodeFile 200038
rem 	goto installend
rem )

rem find "SdFinishReboot-0]" %ISSFILEPATH% > nul 2>&1
rem if "%errorlevel%" neq "0" (
rem 	rem 応答ファイルが不正です。
rem 	call :createErrorCodeFile 200038
rem 	goto installend
rem )
set DLLRENAME=yes
set TARGETDIR=%INSDIR%\wk\supervisor\rmapi
del /F %TARGETDIR%\*.dll.old > nul 2>&1

rem --------------- インストーラ実行 ---------------
start /w ..\..\Setup2K\setup /s /f1%ISSFILEPATH% /f2%SETUPLOG%

:installend
rem ログ格納先が作成されていたらログファイルをコピー
if exist %INSDIR%\wk\supervisor\setup\log\ (
	copy %ERRCODEFILE% %INSDIR%\wk\supervisor\setup\log\. > nul 2>&1
)

rem エラーファイルが作成されていたら異常終了する
if exist %ERRCODEFILE% (
	if "%DLLRENAME%" equ "yes" (
		call ..\..\Setup2K\restoreRmapiDll.bat %INSDIR% > nul 2>&1
	)
	call :restartService
	exit /b 1
)

rem 正常終了
exit /b 0

rem --------------- エラーログファイル作成 ---------------
:createErrorCodeFile
echo [DATE]>%ERRCODEFILE%
echo %date%>>%ERRCODEFILE%
echo [TIME]>>%ERRCODEFILE%
echo %time%>>%ERRCODEFILE%
echo [ERRCODE]>>%ERRCODEFILE%
(echo Result=%1)>>%ERRCODEFILE%
exit /b

rem --------------- サービス再開処理 ---------------
:restartService
rem トレースファイル
set RESTARTSERVICETRACE=%INSDIR%\wk\supervisor\setup\log\RestartServiceTrace.log

echo Restartservice>%RESTARTSERVICETRACE%
echo %date%>>%RESTARTSERVICETRACE%
echo %time%>>%RESTARTSERVICETRACE%

rem サービス登録状態チェック処理
echo =Check registration status of service=====>>%RESTARTSERVICETRACE%

rem サービス停止後から再開までの間にサービスが一旦削除されるタイミングがあるのでチェック
rem DkcManのサービスが削除されているか？
echo check DkcMan>>%RESTARTSERVICETRACE%
sc getkeyname DkcMan > nul 2>&1
(echo Result=%errorlevel%)>>%RESTARTSERVICETRACE%
if "%errorlevel%" neq "0" (
	rem 登録
	echo install DkcMan>>%RESTARTSERVICETRACE%
	cmd /c %SVP_HOME%\wk\supervisor\dkcman\dkcman_install.bat > nul 2>&1
)
echo ------------------------------------------>>%RESTARTSERVICETRACE%

echo check MAPPWebServer>>%RESTARTSERVICETRACE%

rem MAPPWebServerのサービスが削除されているか？
sc getkeyname MAPPWebServer > nul 2>&1
(echo Result=%errorlevel%)>>%RESTARTSERVICETRACE%
if "%errorlevel%" neq "0" (
	rem 登録
	echo install MAPPWebServer>>%RESTARTSERVICETRACE%
	cmd /c %SVP_HOME%\OSS\apache\apache_install.bat > nul 2>&1
	cmd /c %SVP_HOME%\OSS\apache\MAPPWebServer_StartupType_Auto.bat > nul 2>&1
)
echo ------------------------------------------>>%RESTARTSERVICETRACE%

echo check MAPPAppServer>>%RESTARTSERVICETRACE%
rem MAPPAppServerのサービスが削除されているか？
sc getkeyname MAPPAppServer > nul 2>&1
(echo Result=%errorlevel%)>>%RESTARTSERVICETRACE%
if "%errorlevel%" neq "0" (
	rem 登録
	echo install MAPPAppServer>>%RESTARTSERVICETRACE%
	cmd /c %SVP_HOME%\OSS\jetty\jetty_install.bat > nul 2>&1
	cmd /c %SVP_HOME%\OSS\jetty\MAPPAppServer_StartupType_Auto.bat > nul 2>&1

)
echo ------------------------------------------>>%RESTARTSERVICETRACE%

echo check MAPPRestAPIServer>>%RESTARTSERVICETRACE%
rem MAPPRestAPIServerのサービスが削除されているか？
sc getkeyname MAPPRestAPIServer > nul 2>&1
(echo Result=%errorlevel%)>>%RESTARTSERVICETRACE%
if "%errorlevel%" neq "0" (
	rem 登録
	echo install MAPPRestAPIServer>>%RESTARTSERVICETRACE%
	cmd /c %SVP_HOME%\wk\supervisor\restapi\install.bat > nul 2>&1
)
rem サービス実行状態チェック処理
echo =Check service status=====================>>%RESTARTSERVICETRACE%

set SERVICE_STOPPED=no

rem DkcManのサービス停止しているか？
call :IsServiceStopped DkcMan SERVICE_STOPPED
echo ------------------------------------------>>%RESTARTSERVICETRACE%

rem MAPPWebServerのサービス停止しているか？
call :IsServiceStopped MAPPWebServer SERVICE_STOPPED
echo ------------------------------------------>>%RESTARTSERVICETRACE%

rem MAPPAppServerのサービス停止しているか？
call :IsServiceStopped MAPPAppServer SERVICE_STOPPED
echo ------------------------------------------>>%RESTARTSERVICETRACE%

rem MAPPRestAPIServerのサービス停止しているか？
call :IsServiceStopped MAPPRestAPIServer SERVICE_STOPPED
echo =service start============================>>%RESTARTSERVICETRACE%

echo SERVICE_STOPPED=%SERVICE_STOPPED%>>%RESTARTSERVICETRACE%

rem サービス停止なら全サービス開始
if "%SERVICE_STOPPED%" equ "yes" (
	echo execute %SVP_HOME%\wk\supervisor\DKCMan\startinstancemanager.bat>>%RESTARTSERVICETRACE%
	cmd /c %SVP_HOME%\wk\supervisor\DKCMan\startinstancemanager.bat > nul 2>&1
)
echo =end======================================>>%RESTARTSERVICETRACE%

exit /b

rem --------------- サービス停止中判定 ---------------
:IsServiceStopped
echo get %1 state>>%RESTARTSERVICETRACE%
for /f "tokens=1,2,3,4 delims= " %%i in ('sc query %1') do (
	if "%%~i"=="STATE" (
		(echo Result=%%l)>>%RESTARTSERVICETRACE%
		if "%%~l"=="STOPPED" (
			set SERVICE_STOPPED=yes
		)
	)
)
set %2=%SERVICE_STOPPED%

exit /b
