Установка обновлений / Заставка обновления конфигурации / Содержимое макета
файл <!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="application/hta; charset=UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=EmulateIE7">
<hta:application id="oHTA" border="none" caption="no" contextmenu="no" selection="no" icon="splash.ico" innerborder="no"
navigable="yes" showintaskbar="yes" scroll="no" version="1.0.0.0" />
<title>[ЗаголовокЗаставки]</title>
<script language="javascript" src="helpers.js"></script>
<script language="javascript" src="main.js"></script>
<script language="javascript">
var windowWidth = 604
var windowHeight = 324
var windowLeft = 200
var windowTop = 100
if (window.screen) {
windowLeft = (window.screen.availWidth - windowWidth) / 2
windowTop = (window.screen.availHeight - windowHeight) / 2
}
window.moveTo(windowLeft, windowTop)
window.resizeTo(windowWidth, windowHeight)
// Переменные состояния
var step = 0 // Текущий шаг процедуры обновления.
var ret = 0 // Код возврата предыдущего шага.
var finish = false
var errStep = 0
var loadStep = 10 // шаг начала загрузки первого файла обновления
var endLoadStep = loadStep + cfgFileNames.length * 8 // следующий шаг после завершения загрузки файлов обновления
if (cfgFileNames.length === 0) {
endLoadStep = loadStep + 8
}
// Вывести сообщение о ходе обновления
function setProgress (statusText) {
statusText += '...'
progressText.innerHTML = statusText
log(statusText)
}
// Конечный автомат для выполнения шагов процедуры обновления конфигурации.
function doStep (step) {
switch (step) {
case 0:
setProgress('[Шаг1Инициализация]')
break
case 1:
ret = initialize()
break
case 2:
setProgress('[Шаг2ЗавершениеРаботы]')
break
case 3:
ret = disconnectAndBlockUsersHTA()
CollectGarbage()
break
case 4:
if (createBackup) {
setProgress('[Шаг3СозданиеРезервнойКопии]')
}
break
case 5:
ret = backupDB()
break
case 6:
if (executeDeferredHandlers) {
setProgress('[Шаг6ОтложенноеОбновление]')
}
break
case 7:
ret = runDeferredHandlers()
break
case 8:
setProgress('[Шаг11ОтключениеПатчей]')
break
case 9:
ret = TurnOffPatches()
break
case endLoadStep:
if (makeCompression) {
setProgress('[Шаг7СжатиеТаблиц]')
}
break
case endLoadStep + 1:
ret = compressDB()
break
case endLoadStep + 2:
setProgress('[Шаг8РазрешениеПодключений]')
break
case endLoadStep + 3:
ret = allowConnections()
break
case endLoadStep + 4:
setProgress('[Шаг9Завершение]')
break
case endLoadStep + 5:
// Все готово.
finalize(true)
runEnterprise()
self.close()
ClearTempFiles()
finish = true
break
default:
{
if ((step < loadStep) || (step >= endLoadStep)) {
break
}
if (cfgFileNames.length === 0) {
var internalStep = step - loadStep
switch (internalStep) {
case 0:
setProgress('[Шаг4ОбновлениеКонфигурации]')
break
case 1:
if (updateConfiguration){
ret = updateDbCfg()
}
break
case 2:
setProgress('[Шаг4ЗагрузкаРасширений]')
break
case 3:
if (loadExtentions) {
ret = executeLoadExt()
}
break
case 4:
setProgress('[Шаг5ОбновлениеИБ]')
break
case 5:
ret = executeUpdate(true)
break
}
break
}
var cfgFileIndex = Math.floor((step - loadStep) / 8) // 0, 1, 2, 3, ...
var internalStep = (step - loadStep) % 8
var fileProperties = GetRequired(cfgFileNames[cfgFileIndex])
var runHandlers = fileProperties.requiredVersion || (cfgFileIndex + 1 === cfgFileNames.length)
switch (internalStep) {
case 0:
setProgress(format('[Шаг41Загрузка] ({0}/{1})', cfgFileIndex + 1, cfgFileNames.length))
break
case 1:
var fileName = fileProperties.filePath
ret = updateCfg(fileName)
if (ret !== 0) {
log('[СообщениеОтказОбновленияБазыИзФайла]')
ret = loadCfg(fileName)
}
break
case 2:
setProgress(format('[Шаг42ОбновлениеКонфигурации] ({0}/{1})', cfgFileIndex + 1, cfgFileNames.length))
break
case 3:
ret = updateDbCfg()
break;
case 4:
setProgress('[Шаг42ВключениеПатчей]')
break
case 5:
ret = TurnOnPatches()
break
case 6:
if (runHandlers) {
setProgress(format('[Шаг43ОбновлениеИБ] ({0}/{1})', cfgFileIndex + 1, cfgFileNames.length))
}
break
case 7:
if (runHandlers) {
ret = executeUpdate(cfgFileIndex + 1 === cfgFileNames.length)
}
break
}
break
}
}
return ret
}
// Выполнить процедуру обновления конфигурации
function main () {
if (finish) {
return
}
document.getElementById('ProductNameText').innerHTML = '[НаименованиеПродукта]'
document.getElementById('copyrightText').innerHTML = '[Копирайт]'
// Если предыдущий шаг завершился неудачно...
if (ret !== 0 && ret !== -1) {
if (errStep === 0) {
log(format('[СообщениеЗаставкиОшибкаШага]', ret), true)
if (UseRestore) {
setProgress('[Шаг10Восстановление]')
} else {
setProgress('[Шаг9Завершение]')
}
errStep++
setTimeout('main()', 5) // Передача управления IE и повторный вызов main.
return
}
finalize()
runEnterprise(false)
self.close()
ClearTempFiles()
finish = true
return
}
// Последовательное выполнение шагов процедуры обновления.
// При резервном копировании и отключении пользователей может быть необходимо повторить попытку.
if (ret !== -1) {
step++
}
doStep(step)
// Передача управления IE и повторный вызов main через 1 секунду (достаточно для завершения COM-соединения).
// Если еще не все сеансы завершены, то ret = -1 и ждем 18 секунд до следующей проверки.
if (!finish) {
setTimeout('main()', ret !== -1 ? 1000 : 18 * 1000)
}
}
function checkClose () {
if (!finish) {
event.returnValue = format('[ПроцессПрерван]\n' +
'[ПроцессПрерванПодсказка].')
}
}
function ClearTempFiles () {
// Удаляем временные файлы
try {
oFileSystemObject.DeleteFile(thisFileDir + '\\main.js')
oFileSystemObject.DeleteFile(thisFileDir + '\\helpers.js')
oFileSystemObject.DeleteFile(thisFileDir + '\\add-delete-patches.js')
oFileSystemObject.DeleteFile(thisFileDir + '\\splash.png')
oFileSystemObject.DeleteFile(thisFileDir + '\\splash.ico')
oFileSystemObject.DeleteFile(thisFileDir + '\\progress.gif')
oFileSystemObject.DeleteFile(thisFileDir + '\\splash.hta')
oFileSystemObject.DeleteFile(thisFileDir + '\\templog.txt')
} catch (e) { }
}
</script>
</head>
<body onload="window.setTimeout('main()',10);" style="border: 2px; background-image:url(splash.png); background-repeat: no-repeat; background-position: center center; background-attachment: fixed; background-color: #B3B3B3;">
<div id="progressIcon" style="position: absolute; left: 10px; top: 65px;">
<img src="progress.gif" border="0" />
</div>
<div id="captionText" style="font-size: 9pt; font-family: verdana,arial; font-weight: bold;
color: #606060; position: absolute; left: 80px; top: 70px;">
[ТекстЗаставки]
</div>
<div id="progressText" style="font-size: 8pt; font-family: verdana,arial; color: #000000;
position: absolute; left: 10px; top: 240px;">
</div>
<div id="productNameText" style="font-size: 12pt; font-family: sans,sans-serif; color: #50525b; font-weight: bold;
position: absolute; left: 20px; top: 270px;">
</div>
<div id="copyrightText" style="font-size: 8pt; font-family: sans,sans-serif; color: #9b9b9b; font-weight: bold;
position: absolute; left: 20px; top: 290px;">
</div>
</body>
</html>