|
|
|
| | |
|
Автоматическое обновление клиентской части
Скрипт обновления клиентской части
Вариант 1
файлы клиентской части помещены в общедоступную папку на сервере
Пароль не должен быть сохранен в файле ADP.
Удобно использовать с Trusted - connection.
Удобно если пользователей очень много и у всех должна быть одна версия.
Программист просто копирует готовый файл partner.adp в \\dataserver\partners\Files\
Создайте при помощью любого текстового редактора
скрипт и поместите в общую папку на сервер:
Update.VBS:
const regkey = "partner" 'Ключ реестра где хранится дата время версии последнего обновления
Const SrcPath = "\\dataserver\partners\Files\partner.adp" 'Путь и имя файла дистрибутива
Const DestPath = "C:\base\partners\partner$.adp" 'Путь и имя файла на локальном диске
Const StartupParams = " /runtime" 'Параметры запуска
'-----------------------------------------------------------------------------------------------
'© 2004 Козин А.А. Обновления: http://www.msdatabase.ru
'-----------------------------------------------------------------------------------------------
call update()
sub update()
Set Fso = CreateObject("Scripting.FileSystemObject")
set oShell= WScript.CreateObject("WScript.Shell")
on error resume next
'Защита от двойного запуска в 5 сек интервал - запоминаем время последней загрузки
prevload = oShell.RegRead ("HKEY_CURRENT_USER\Software\vbsupdater\" & regkey & "\lastload")
if cdbl(cdate(prevload))+ .0001 > cdbl(now()) and cdbl(cdate(prevload)) < cdbl(now()) then
'msgbox "Не запускайте скрипт дважды"
exit sub
end if
oShell.RegWrite "HKEY_CURRENT_USER\Software\vbsupdater\" & regkey & "\lastload", now(), "REG_SZ"
Set newfile = fso.GetFile(SrcPath)
srcfiledate = newfile.DateLastModified
On Error Resume Next
'Так как локальный файл может быть изменен на клиенте и учитывать это не следует
'Запоминаем и считываем из реестра время изменения последней копии загруженной с сервера
currentfiledate = oShell.RegRead ("HKEY_CURRENT_USER\Software\vbsupdater\" & regkey & "\datetime")
err.clear
if cdate(srcfiledate) = cdate(currentfiledate) then
'Обновление не требуется
'Пробуем переименовать файл сам в себя
call Fso.moveFile (DestPath, DestPath)
else
call Fso.CopyFile (SrcPath, DestPath, true)
if err.number = 0 then
oShell.RegWrite "HKEY_CURRENT_USER\Software\vbsupdater\" & regkey & "\datetime", srcfiledate, "REG_SZ"
end if
end if
'Если произошла ошибка то приложение уже загружено
If Err.Number = 0 Then
openedbefore =false
Else
openedbefore =true
End If
err.clear
'Определяем путь к аксессу XP
access10path = oShell.RegRead("HKLM\Software\Microsoft\Office\10.0\Common\InstallRoot\Path")
If Err.Number <> 0 Then MsgBox "На данном компьютере установлены не все необходимые компоненты (MsAccess 2002-XP) " , , "Ошибка при установке"
on error goto 0
if not openedbefore then
'Запускаем
oShell.Run """" & access10path & "MSACCESS.EXE" & """ " & DestPath & StartupParams
else
'Если файл загружен то просто максимизировать окно без обновления.
Set ACC = GetObject( DestPath)
ACC.application.docmd.RunCommand 10
end if
end sub
Скрипт проверяет что установлен MSAccess XP (он же 2002, он же Aксесс10)
Если приложение не загружено то обновляет его новой версией с сервера, в случае, если дата-время изменения файла на сервере отличны от последней скопированной версии.
Если загружено, то просто максимизирует окно приложения.
Создание ярлыка на скрипт обновления.
(может быть частью setup-файла)
Код создания ярлыка на рабочем столе пользователя:
Set oShell = CreateObject("WScript.Shell")
strDesktop = oShell.SpecialFolders("Desktop")
Set oShellLink = oShell.CreateShortcut(strDesktop & "\Составление_бюджета.lnk")
oShellLink.TargetPath = "\\dataserver\partners\Files\update.vbs"
oShellLink.WindowStyle = 3
oShellLink.Hotkey = "CTRL+SHIFT+P"
oShellLink.IconLocation = access10path & "MSACCESS.EXE , 0"
oShellLink.Description = "Составление бюджета"
oShellLink.WorkingDirectory = strDesktop
oShellLink.Save
Вариант 2
Файлы клиентской части записываются программистом в открытую для совместного доступа
папку на компьютере клиента.
Пароль может быть сохранен в файле ADP.
Удобно использовать при ограниченном числе клиентов или если требуется обновление
только отдельным клиентам
Программист просто копирует готовый файл Client.adp по сети .
Для этого удобно вывести ярлыки сетевых папок клиентов в каталог с программой или использовать скрипт для копирования.
Const SrcPath = "c:\base\Client.adp" 'это исходное имя файла который будет скопирован
Const DestPath = "c:\base\TIMESHEET\Client$.adp" 'это рабочее имя файла под которым будет запущено приложение
Const StartupParams = "" 'дополнителные параметры командной строки
'-----------------------------------------------------------------------------------------------
'© 2005 Козин А.А. Обновления: http://www.msdatabase.ru
'-----------------------------------------------------------------------------------------------
'Пробуем скопировать исходый файл под рабочим именем
Set Fso = CreateObject("Scripting.FileSystemObject")
set oShell= WScript.CreateObject("WScript.Shell")
On Error Resume Next
call Fso.copyfile (SrcPath , DestPath, True)
If Err.Number = 0 Then
'Если скопировать получилось значит приложение не было открыто ранее
openedbefore =false
Else
openedbefore =true
End If
err.clear
'Ищем путь к аксессу XP
access10path = oShell.RegRead("HKLM\Software\Microsoft\Office\10.0\Common\InstallRoot\Path")
If Err.Number <> 0 Then MsgBox "На данном компьютере установлены не все необходимые компоненты (MsAccess 2002-XP) " & vbCrLf & "Обратитесь в службу технической поддержки"
on error goto 0
if not openedbefore then
'Запускаем файл
oShell.Run """" & access10path & "MSACCESS.EXE" & """ " & DestPath & StartupParams
else
'Если файл загружен то просто максимизировать окно без обновления.
Set ACC = GetObject( DestPath)
ACC.application.docmd.RunCommand 10
end if
| |
| | |