SLasH Цитата: ' Копируем файл изнутри наружу
If Not FSO.FileExists(SandboxPath & "\MegaSuperProga.exe") Then
cmd = CMD_ETERNAL & " /C copy ""C:\Program Files\Some Program Software\MegaSuperProga.exe"" " &chr(34)& SandboxPath & "\MegaSuperProga.exe"
ExecuteVirtualProcess(HSTART & " /NOCONSOLE " & chr(34) & cmd & chr(34))
Do
MySleep(1)
Loop Until FSO.FileExists(SandboxPath & "\MegaSuperProga.exe")
End If
Как я понял это только часть изложенного Вами выше скрипта. Пожалуйста, если не трудно, можно увидеть весь скрипт целиком. Сам боюсь при редактировании сделаю море ошибок. Повторюсь, всего файлов два:
"MegaSuperProga.ini" и
"MegaSuperProga.exe". При этом первым экспортируется в "песочницу" файл
"MegaSuperProga.ini", а затем только
"MegaSuperProga.exe", и производится запуск последнего. Ожидаем завершения работы
"MegaSuperProga.exe" и удаляем его. "Инишник" (
"MegaSuperProga.ini") оставляем в "песочнице", при повторном запуске осуществляем проверку на наличие
"MegaSuperProga.ini" и
"MegaSuperProga.exe" в каталоге "песочницы". Если файлы там уже имеются, не выносим их из виртуальной среды. Пожалуйста, помогите довести скрипт до окончательного варианта. Очень Вам благодарен.
Добавлено: Отредактировал скрипт [more=таким образом]Function OnLastProcessExit
const MegaProga = "MegaSuperProga.exe"
Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim Origin: Origin = GetEnvironmentVariable("TS_ORIGIN")
' В проекте папка "%drive_c%\Progs" с exe-шниками, которые нужно вынести наружу
const PROG_PATH = "C:\Program Files\Data"
' Часть пути из PROG_PATH без буквы диска: \Progs
Dim PROG_SUB_PATH: PROG_SUB_PATH = Mid(PROG_PATH, 3)
' Внешний cmd.exe
Dim CMD_EXTERNAL: CMD_EXTERNAL = chr(34) & ExpandPath("%SystemRoot%\system32\cmd.exe") & chr(34)
' В проекте "%drive_c%\Progs\hstart.exe
Dim HSTART: HSTART = PROG_PATH & "\hstart.exe"
LastSlash = InStrRev(Origin, "\")
SourcePath = Left(Origin, LastSlash)
ExeName = Mid(Origin, LastSlash + 1, Len(Origin))
SandboxParent = GetBuildOption("SandboxPath")
SandboxName = GetBuildOption("SandboxName")
If SandboxParent = "." Then
SandboxPath = SourcePath & SandboxName
Else
SandboxPath = SandboxParent & "\" & SandboxName
End If
' Внешний hstart.exe: <SandBox>\Progs\hstart.exe
Dim HSTART_EXTERNAL: HSTART_EXTERNAL = SandboxPath & PROG_SUB_PATH & "\hstart.exe"
On Error Resume Next
' Копируем файл изнутри наружу
If Not FSO.FileExists(SandboxPath & "\MegaSuperProga.ini") Then
cmd = CMD_EXTERNAL & " /C copy ""C:\Program Files\Data\MegaSuperProga.ini"" " &chr(34)& SandboxPath & "\MegaSuperProga.ini"
ExecuteVirtualProcess(HSTART & " /NOCONSOLE " & chr(34) & cmd & chr(34))
Do
MySleep(1)
Loop Until FSO.FileExists(SandboxPath & "\MegaSuperProga.ini")
End If
If Not FSO.FileExists(SandboxPath & "\MegaSuperProga.exe") Then
cmd = CMD_EXTERNAL & " /C copy ""C:\Program Files\Data\MegaSuperProga.exe"" " &chr(34)& SandboxPath & "\MegaSuperProga.exe"
ExecuteVirtualProcess(HSTART & " /NOCONSOLE " & chr(34) & cmd & chr(34))
Do
MySleep(1)
Loop Until FSO.FileExists(SandboxPath & "\MegaSuperProga.exe")
End If
' Запуск из песочницы
cmd = CMD_EXTERNAL & " /C " & chr(34)& SandboxPath & PROG_SUB_PATH &"\"& MegaProga & chr(34)
Call WaitForProcess(ExecuteExternalProcess(HSTART_EXTERNAL & " /NOCONSOLE " & chr(34) & cmd & chr(34)), 0)
End Function
'--[ Пауза ]--------------------------------------------------------------------
Function MySleep(interval)
Dim i,j
For i = 1 To 20000000*interval
j = 1
Next
End Function[/more]. Думаю не совсем все я сделал правильно.
Добавлено: Файлы извлекаются, только вот запуск исполняемого файла не происходит. Еще одно последнее пожелание, хотелось бы увидеть вариант скрипта с ожиданием завершения процесса
"MegaSuperProga.exe" и без ожидания завершения процесса.