coherent
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Option Explicit Dim fso, Origin, SourcePath, MyProgSourceExe, MyProgSourceIni, hstart, hstartDest, cmd32, SandboxParent, SandboxName, SandboxPath, MyProgDestExe, MyProgDestIni, cmd, id, ProcessName, ProcessNameFriend Function OnLastProcessExit Set fso = CreateObject("Scripting.FileSystemObject") Origin = GetEnvironmentVariable("TS_ORIGIN") SourcePath = Left(Origin, InStrRev(Origin, "\") - 1) MyProgSourceExe = ExpandPath("%ProgramFilesDir%\Data\MyProgram.exe") MyProgSourceIni = ExpandPath("%ProgramFilesDir%\Data\MyProgram.ini") hstart = ExpandPath("%ProgramFilesDir%\Data\hstart.exe") hstartDest = SourcePath & "\hstart.exe" cmd32 = ExpandPath("%SystemSystem%\cmd.exe") SandboxParent = GetBuildOption("SandboxPath") SandboxName = GetBuildOption("SandboxName") If SandboxParent = "." Then SandboxPath = SourcePath & Chr(92) & SandboxName Else SandboxPath = SandboxParent & Chr(92) & SandboxName End If MyProgDestExe = SandboxPath & "\MyProgram.exe" MyProgDestIni = SandboxPath & "\MyProgram.ini" cmd = cmd32 & " /C " & chr(34) & MyProgDestExe & chr(34) If not fso.FileExists(MyProgDestIni) then fso.CopyFile MyProgSourceIni, MyProgDestIni End If If not fso.FileExists(MyProgDestExe) then fso.CopyFile MyProgSourceExe, MyProgDestExe End If If not fso.FileExists(hstartDest) then fso.CopyFile hstart, hstartDest End If id = ExecuteExternalProcess(hstartDest & " /NOCONSOLE " & chr(34) & cmd & chr(34)) ProcessName = "MyProgram.exe" ProcessNameFriend = "MyProgram" Do while isProcessRunning(ProcessName, ProcessNameFriend) Loop id = ExecuteExternalProcess(hstartDest & " /NOCONSOLE " & chr(34) & "taskkill /F /IM " & "Wmiprvse.exe" & chr(34)) WaitForProcess id, 0 If fso.FileExists(MyProgDestExe) Then fso.DeleteFile(MyProgDestExe) End if If fso.FileExists(hstartDest) Then fso.DeleteFile(hstartDest) End if End Function Function isProcessRunning(ProcessName, ProcessNameFriend) Dim objWMIService, Process set objWMIService = GetObject ("winmgmts:") isProcessRunning = False For each Process in objWMIService.InstancesOf ("Win32_Process") If StrComp(Process.Name,ProcessName,vbTextCompare) = 0 then isProcessRunning = true End If Next End Function |