Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » VMware ThinApp (formerly Thinstall) 3

Модерирует : gyra, Maz

articlebot (28-02-2016 18:11): VMware ThinApp (formerly Thinstall) часть 4  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

SLasH

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
' @appName    cmd
' @author    Ciber SLasH
' @ver        0.01
' @cDate    05.06.2014
' @mDate
'///////////////////////////////////////////////////////////////////////////////
'==[ Описание работы ]==========================================================
'///////////////////////////////////////////////////////////////////////////////
' 1. Перед запуском приложения анализируется папка
' "%UserProfile%\AppData\Local\ChemTable Software" и если она существует, то она
' бэкапится в песочницу по пути "<SnadboxPath>\_Backup"
' 2. Удаляется папка "%UserProfile%\AppData\Local\ChemTable Software"
' 3. Прописывается скрипт в автозагрузку. В раздел
' [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]
' "Temp"="<путь к скрипту>"
' <путь к скрипту> = %TEMP%\<имя приложения>_afterReboot.vbs
' Далее предпологается, что приложение сделало свои дела и ОС перезагрузили.
' После перезагрузки запускается скрипт, который делает следующее:
' 1. Уадаляет папку "%UserProfile%\AppData\Local\ChemTable Software"
' 2. Восстанавливает из бэкапа то, что было в папке
' "%UserProfile%\AppData\Local\ChemTable Software" перед работой приложения
'///////////////////////////////////////////////////////////////////////////////
const DEBUG = 1
 
'Dim APP_NAME: APP_NAME = GetBuildOption("InventoryName")
Dim APP_NAME: APP_NAME = "cmd"
Dim SCRIPT_NAME: SCRIPT_NAME = "script.vbs"
Dim SCRIPT_EXT_NAME: SCRIPT_EXT_NAME = "ThinApp :: " & APP_NAME & " -> " & SCRIPT_NAME
 
Dim FSO: Set FSO = CreateObject("Scripting.filesystemObject")
const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim WORK_DIR_SUB_PATH: WORK_DIR_SUB_PATH = GetEnvironmentVariable("UserProfile") & "\AppData\Local"
Dim WORK_DIR: WORK_DIR = WORK_DIR_SUB_PATH & "\ChemTable Software"
Dim TMP_DIR: TMP_DIR = ExpandPath("%TEMP%")
' Скрипт, который будет запущен после перезагрузки
Dim SCRIPT_PATH: SCRIPT_PATH = TMP_DIR &"\"& APP_NAME &"_afterReboot.vbs"
' Внешний regedit.exe
Dim REGEDIT_EXTERNAL: REGEDIT_EXTERNAL = chr(34) & ExpandPath("%SystemRoot%\regedit.exe") & chr(34)
'-------------------------------------------------------------------------------
'--[ Выполняется при запуске ]--------------------------------------------------
'-------------------------------------------------------------------------------
Function OnFirstSandboxOwner
const FUNC_NAME = "OnFirstSandboxOwner"
' Полный путь к запущенному exe-шнику проекта.
' Пример: D:\Soft\Utils\_Portable\VMware ThinApp\Captures\cmd_1\bin\cmd.exe
Dim Origin: Origin = GetEnvironmentVariable("TS_ORIGIN")
' Путь к приложению, имя приложения, путь к песочнице
Dim SourcePath, ExeName, SandboxPath
    ' LastSlash = позиция последнего backslash-а в Origin
    LastSlash = InStrRev(Origin, "\")
    ' SourcePath = путь из Origin без последнего backslash-а (путь к запущенному exe-шнику)
    SourcePath = Left(Origin, LastSlash)
    ' ExeName = имя exe-шника
    ExeName = Mid(Origin, LastSlash + 1)
 
    SandboxParent = GetBuildOption("SandboxPath")
    SandboxName = GetBuildOption("SandboxName")
    If SandboxParent = "." Then
        SandboxPath = SourcePath & SandboxName
    Else
        SandboxPath = SandboxParent & "\" & SandboxName
    End If
 
    On Error Resume Next
    Dim BACKUP_PATH: BACKUP_PATH = SandboxPath & "\_Backup"
    ' Очищаем бэкап
    If FSO.FolderExists(BACKUP_PATH) Then
        FSO.DeleteFolder(BACKUP_PATH)
    End If
    ' Бэкап "WORK_DIR" в песочницу
    If FSO.FolderExists(WORK_DIR) Then
        ' Копируем папку изнутри в песочницу
        ret = CopyFolderExternal(WORK_DIR, BACKUP_PATH)
        If ret <> 0 Then
            If DEBUG Then
                Call MsgBox( _
                    "Function: " & FUNC_NAME & vbNewLine & _
                    "SubFunction: CopyFileExternal" & vbNewLine & _
                    "SubFunction ReturnCode: " & ret & vbNewLine & _
                    "--" & vbNewLine & _
                    "Критическая ошибка, выполнение функции прервано !" _
                    , vbOKOnly + vbCritical, "[ERROR] " & SCRIPT_EXT_NAME _
                )
            End If
            Exit Function
        End If
        ' Удаление "WORK_DIR"
        FSO.DeleteFolder(WORK_DIR)
    End If
 
    ' Наполняем скрипт
    Set f = FSO.OpenTextFile(SCRIPT_PATH, ForWriting, true)
    f.WriteLine("Set FSO = CreateObject(""Scripting.filesystemObject"")")
    f.WriteLine("On Error Resume Next")
    ' Удаляем "WORK_DIR"
    f.WriteLine("FSO.DeleteFolder("""& WORK_DIR &""")")
    ' Восстанавливаем "WORK_DIR" из бэкапа
    f.WriteLine("FSO.CopyFolder """& BACKUP_PATH &""", """& WORK_DIR_SUB_PATH &""", true")
    ' Удаляем наш скрипт
    f.WriteLine("FSO.DeleteFile(WScript.ScriptFullName)")
    f.Close
 
    ' Прописываем скрипт в автозагрузку
    Dim TMP_REG: TMP_REG = TMP_DIR &"\"& APP_NAME & ".tmp"
    Set f = FSO.OpenTextFile(TMP_REG, ForWriting, true, -1)
    f.WriteLine("Windows Registry Editor Version 5.00")
    f.WriteLine
    f.WriteLine("[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]")
    SP = Replace(SCRIPT_PATH, "\", "\\")
    SP = "\"&chr(34) & SP & "\"&chr(34)
    f.WriteLine("""Temp""="""& SP & """")
    f.Close
    cmd = REGEDIT_EXTERNAL & " /S " &chr(34)& TMP_REG &chr(34)
    Call WaitForProcess(ExecuteExternalProcess(cmd), 0)
    FSO.DeleteFile(TMP_REG)
 
    ' Ниже можно вставить другие необходимые действия
End Function
'///////////////////////////////////////////////////////////////////////////////
'==[ Доп. функции ]=============================================================
'///////////////////////////////////////////////////////////////////////////////
'--[ Копирование папки ]--------------------------------------------------------
' @param1    - исходный путь к папке
' @param2    - путь назначения, куда будет копироваться исходная папка
' @retrun    - значение ошибки (0 - ошибок нет)
Function CopyFolderExternal(src, dst)
const FUNC_NAME = "CopyFolderExternal"
Dim dstName
    On Error Resume Next
    ' Проверка существования папки
    If Not FSO.FolderExists(src) Then
        If DEBUG Then
            Call MsgBox( _
                "Function: "&FUNC_NAME&"::FolderExists" & vbNewLine & _
                "args[0]: " & src & vbNewLine & _
                "--" & vbNewLine & _
                "Err.Number: " & Err.Number & vbNewLine & _
                "Err.Description: " & Err.Description _
                , vbOKOnly + vbCritical, "[ERROR] " & SCRIPT_EXT_NAME _
            )
        End If
        Err.Clear
        CopyFolderExternal = -1
        Exit Function
    End If
 
    ' Добавляем "\" в конец пути назначения, если нет backslash-а
    If Not (Right(dst, 1) = "\") Then
        dstName = dst & "\"
    End If
 
    ' Проверка существования папки назначения
    If Not FSO.FolderExists(dst) Then
        ' Если нет папки назначения, то создаём её
        FSO.CreateFolder(dst)
        If Err.Number <> 0 Then
            If DEBUG Then
                Call MsgBox( _
                    "Function: "&FUNC_NAME&"::CreateFolder" & vbNewLine & _
                    "args[0]: " & dst & vbNewLine & _
                    "--" & vbNewLine & _
                    "Err.Number: " & Err.Number & vbNewLine & _
                    "Err: " & Err.Description _
                    , vbOKOnly + vbCritical, "[ERROR] " & SCRIPT_EXT_NAME _
                )
            End If
            Err.Clear
            CopyFolderExternal = -2
            Exit Function
        End If
    End If
 
    ' Копируем исходную папку в папку назначения
    FSO.CopyFolder src, dstName, true
    If Err.Number <> 0 Then
        If DEBUG Then
            Call MsgBox( _
                "Function: "&FUNC_NAME&"::CopyFolder" & vbNewLine & _
                "args[0]: " & src & vbNewLine & _
                "args[1]: " & dstName & vbNewLine & _
                "--" & vbNewLine & _
                "Err.Number: " & Err.Number & vbNewLine & _
                "Err: " & Err.Description _
                , vbOKOnly + vbCritical, "[ERROR] " & SCRIPT_EXT_NAME _
            )
        End If
        CopyFolderExternal = -3
        Err.Clear
        Exit Function
    End If
 
CopyFolderExternal = 0
End Function

Всего записей: 723 | Зарегистр. 08-10-2002 | Отправлено: 22:47 05-06-2014 | Исправлено: SLasH, 22:48 05-06-2014
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » VMware ThinApp (formerly Thinstall) 3
articlebot (28-02-2016 18:11): VMware ThinApp (formerly Thinstall) часть 4


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru