|
Перезапуск Аксесса
Использование WSH скрипта для перезагрузки Аксесса
(Идея Сенина Виктора)
Алгоритм следующий:
Во временной папке создается временный файл скрипта
аксесс запускает этот скрипт
скрипт завершает работу Аксесса
скрипт открывает изначальный проект
скрипт удаляет свой временный файл
Код перезапуска с предварительным копированием новой версии файла под старым именем:
Private Sub restart(newfile As String)
If MsgBox("Обновление загружено." & vbCrLf & _ " Для вступления изменений всилу следует перезапустить приложение." & vbCrLf & " Сделать это сейчас ?", vbInformation + vbYesNo) = vbYes Then
Dim Tempscriptfile, tfolder, WshShell, acdir, Fso
Set Fso = CreateObject("Scripting.FileSystemObject")
acdir = SysCmd(acSysCmdAccessDir)
Set WshShell = CreateObject("WScript.Shell")
Set tfolder = Fso.GetSpecialFolder(2)
Tempscriptfile = tfolder & Fso.GetTempName
Tempscriptfile = Replace(Tempscriptfile, ".tmp", ".vbs", , , vbTextCompare)
Open Tempscriptfile For Output As #1
Print #1, "Set fso = CreateObject(""Scripting.FileSystemObject"")"
Print #1, "Set WshShell = WScript.CreateObject(""WScript.Shell"")"
Print #1, "Set acc = WScript.GetObject(""" & CurrentProject.FullName & """)"
Print #1, "acc.quit "
Print #1, "WScript.Sleep 4000"
Print #1, "Fso.CopyFile " & Chr(34) & newfile & Chr(34) & "," & Chr(34) & CurrentProject.FullName & Chr(34) & ", true"
Print #1, "WshShell.Run "; """"""""; acdir; "msaccess.exe" & Chr(34) & Chr(34) & " " & Chr(34) & Chr(34) & CurrentProject.FullName; """"""""
Print #1, "Set MyFile = fso.GetFile(""" & newfile & """)"
Print #1, "MyFile.Delete"
Print #1, "Set MyFile = fso.GetFile(""" & Tempscriptfile & """)"
Print #1, "MyFile.Delete"
Print #1, "Set fso = NOTHING"
Print #1, "Set WshShell = NOTHING"
Close #1
WshShell.Run (Tempscriptfile)
Set Fso = Nothing: Set tfolder = Nothing: Set WshShell = Nothing
End If
End Sub
Код простого перезапуска:
Private Sub restartOnly()
If MsgBox("Перезапустить приложение?", vbInformation + vbYesNo) = vbYes Then
Dim Tempscriptfile, tfolder, WshShell, acdir, Fso
Set Fso = CreateObject("Scripting.FileSystemObject")
acdir = SysCmd(acSysCmdAccessDir)
Set WshShell = CreateObject("WScript.Shell")
Set tfolder = Fso.GetSpecialFolder(2)
Tempscriptfile = tfolder & Fso.GetTempName
Tempscriptfile = Replace(Tempscriptfile, ".tmp", ".vbs", , , vbTextCompare)
Open Tempscriptfile For Output As #1
Print #1, "Set fso = CreateObject(""Scripting.FileSystemObject"")"
Print #1, "Set WshShell = WScript.CreateObject(""WScript.Shell"")"
Print #1, "Set acc = WScript.GetObject(""" & CurrentProject.FullName & """)"
Print #1, "acc.quit "
Print #1, "WScript.Sleep 4000"
Print #1, "WshShell.Run "; """"""""; acdir; "msaccess.exe" & Chr(34) & Chr(34) & " " & Chr(34) & Chr(34) & CurrentProject.FullName; """"""""
Print #1, "Set MyFile = fso.GetFile(""" & Tempscriptfile & """)"
Print #1, "MyFile.Delete"
Print #1, "Set fso = NOTHING"
Print #1, "Set WshShell = NOTHING"
Close #1
WshShell.Run (Tempscriptfile)
Set Fso = Nothing: Set tfolder = Nothing: Set WshShell = Nothing
End If
End Sub
| |