@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 Setup.logファイルの一時出力先
set SETUPLOG=%TRACEDIR%\setup.log
rem 応答ファイル
set ISSFILEPATH=..\..\Setup2K\install.iss
rem インストールパスを編集した応答ファイル
set TMPFILEPATH=%TRACEDIR%\tmp.iss
set USETMPFILE=0
set INSDIR=nul
set ELEVATED=no
set REGTMP=%TRACEDIR%\regtmp.txt

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 "%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% neq nul (
	rem インストール済
	call :createErrorCodeFile 200040
	goto installend
)

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% neq nul (
	rem インストール済
	call :createErrorCodeFile 200040
	goto installend
)

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

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

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

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

rem --------------- インストールパス指定時の応答ファイル編集 ---------------
rem インストールパス
set INSDIR=C:\Mapp

rem 引数チェック
if "%~1" == "" (
	rem 引数（インストールパス）が指定されていなければ応答ファイル編集なし
	set TMPFILEPATH=%ISSFILEPATH%
	goto responseFileCheckEnd
)

rem 応答ファイル内のデフォルトインストールパス
set dfltpath=szDir=C:\Mapp
rem 新しいインストールパス
set newpath=szDir=%~1
set INSDIR=%~1
set USETMPFILE=1

rem 応答ファイルを一行ずつ読み込み
for /f "delims=" %%i in (%ISSFILEPATH%) do (
	rem インストールパスの行？
	if "%dfltpath%" equ "%%i" (
		rem 新しいインストールパスで出力
		echo %newpath%>>%TMPFILEPATH%
	)
	rem 他の行
	if "%dfltpath%" neq "%%i" (
		rem 読み込んだ一行の文字列をそのまま出力
		echo %%i>>%TMPFILEPATH%
	)
)

rem 応答ファイルチェック終了
:responseFileCheckEnd

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

:installend
rem テンポラリ応答ファイルの削除
if %USETMPFILE%==1 (
	del %TMPFILEPATH%
)

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

rem エラーファイルが作成されていたら異常終了する
if exist %ERRCODEFILE% (
	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

