007Alex007
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору coherent Прошу прощения, что так долго не отвечал и хочу сразу поблагодарить за оказанную помощь. «Хотелка» очень интересная штука, но не помогла при копировании arrProcs.vbs в песочницу или рядом с запускаемым EXE, при запуске скрипта происходит тоже самое, о чем я писал ранее. Возможно, с моим скриптом так ничего толкового не вышло, но зато благодаря его исследованию я узнал много нового для себя, в частности создания скриптов. Вот хочу для всех, поделиться не которыми скриптами: 1. Отличный скрипт для удаления зависших процессов, работает без консольных окон. Скрипт найден на этом форуме, я лишь добавил в него параметр «0», чтобы при его работе не было видно консольных окон: Код: Function OnFirstParentExit Dim WshShell set WshShell = CreateObject("WScript.Shell") WshShell.run "taskkill /F /IM realplay.exe /IM rndlresolversvc.exe /IM realsched.exe /IM RealUpgrade.exe /T",0 End Function | 2. Думаю, скрипт MUICacheCreate здесь знаком многим, он нужен для очистки следов после запуска портативки в ветке реестра MUICache. Я этот скрипт апгрейдил (склеил из разных скриптов) и теперь он не просто удаляет ветку MUICache, а сначала бэкапит ее и после завершения работы портативки удаляет ветку MUICache из реестра и возвращает забэкапенную ветку на место. Кроме того, старый скрипт работал только для Windows XP, а этот работает и для Windows7 (может и для Win8 не проверял): Код: BackupRegXP = ExpandPath("%Personal%\MUICacheBackupXP.reg") BackupReg7 = ExpandPath("%Personal%\MUICacheBackup7.reg") Function OnFirstParentStart WaitForProcess ExecuteExternalProcess("regedit /e " & chr(34) & BackupRegXP & chr(34) & " ""HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache"""), 0 WaitForProcess ExecuteExternalProcess("regedit /e " & chr(34) & BackupReg7 & chr(34) & " ""HKEY_CURRENT_USER\Software\Classes\Local Settings\MuiCache"""), 0 End Function Function OnFirstParentExit RegFileNameXP = ExpandPath("%Personal%\MUICacheDelXP.reg") RegFileName7 = ExpandPath("%Personal%\MUICacheDel7.reg") Set fso = CreateObject("Scripting.FileSystemObject") Set RegFileXP = fso.CreateTextFile(RegFileNameXP, true) RegFileXP.WriteLine("Windows Registry Editor Version 5.00") RegFileXP.WriteBlankLines(1) RegFileXP.WriteLine("[-HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache]") RegFileXP.WriteBlankLines(1) RegFileXP.Close Set RegFile7 = fso.CreateTextFile(RegFileName7, true) RegFile7.WriteLine("Windows Registry Editor Version 5.00") RegFile7.WriteBlankLines(1) RegFile7.WriteLine("[-HKEY_CURRENT_USER\Software\Classes\Local Settings\MuiCache]") RegFile7.WriteBlankLines(1) RegFile7.Close RegEditPidXP = ExecuteExternalProcess("regedit /s " & chr(34) & RegFileNameXP & chr(34)) WaitForProcess RegEditPidXP, 0 RegEditPid7 = ExecuteExternalProcess("regedit /s " & chr(34) & RegFileName7 & chr(34)) WaitForProcess RegEditPid7, 0 fso.DeleteFile(RegFileNameXP) fso.DeleteFile(RegFileName7) End Function Function OnLastProcessExit Set fso = CreateObject("Scripting.FileSystemObject") RegEditPidXP = ExecuteExternalProcess("regedit /s " & chr(34) & BackupRegXP & chr(34)) RegEditPid7 = ExecuteExternalProcess("regedit /s " & chr(34) & BackupReg7 & chr(34)) WaitForProcess RegEditPidXP, 0 WaitForProcess RegEditPid7, 0 On Error Resume Next fso.DeleteFile(BackupRegXP) On Error Resume Next fso.DeleteFile(BackupReg7) End Function | 3. И наконец скрипт PrefetchBackup.vbs для очистки папки Prefetch. Я здесь, когда то спрашивал о таком скрипте, мне так никто и не ответил, поэтому решил сделать сам. Скрипт копирует, бэкапит все содержимое папки Prefetch, в другую папку, затем очищает оригинальную папку, а после завершения работы портативки копирует обратно файлы из забэкапенной папки. Конечно, проще было бы через копирование папки, а не файлов, но один раз я столкнулся с проблемой возврата папки, система написала «отказано в доступе», а через копирование файлов такого пока что не было. Перед тем как использовать скрипт PrefetchBackup.vbs, нужно обязательно, перед тем как произвести сборку проекта, в папку проекта %SystemRoot% добавить папку Prefetch и установить в ##Attributes.ini параметр Merged. Если этого не сделать то при восстановлении файлы будут попадать не в реальную систему, а в песочницу. Код: Function OnFirstParentStart SourceFolder = "C:\WINDOWS\Prefetch" DestFolder = ExpandPath("%Personal%\Prefetch") On Error Resume Next Set FSO = CreateObject("Scripting.FileSystemObject") If not FSO.FolderExists(SourceFolder) Then MsgBox ("Не найден или не указан источник файлов") WScript.Quit End If If not FSO.FolderExists(DestFolder) Then FSO.CreateFolder DestFolder End If If Err.Number <> 0 Then MsgBox ("Не верно указан целевой каталог: " & DestFolder) WScript.Quit End If Set Files = FSO.GetFolder(SourceFolder).Files For Each f In Files If Not FSO.FileExists(DestFolder + "\" + f.Name) Then FSO.CopyFile f, DestFolder + "\" + f.Name, True Next set SourceFolder = fso.getfolder(SourceFolder) for each rf in SourceFolder.subfolders on error resume next call fso.copyfolder(rf, DestFolder & "\" & rf.name) Next End Function Function OnFirstParentExit Set WshShell = CreateObject("WScript.Shell") Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder("C:\WINDOWS\Prefetch") Set colSubfolders = objFolder.Subfolders For Each objSubfolder in colSubfolders errResults = objSubfolder.Delete Next Set files_col = objFolder.files For each file_obj in files_col file_obj.delete(true) Next End Function Function OnLastProcessExit SourceFolder = ExpandPath("%Personal%\Prefetch") DestFolder = "C:\WINDOWS\Prefetch" On Error Resume Next Set FSO = CreateObject("Scripting.FileSystemObject") Set Files = FSO.GetFolder(SourceFolder).Files For Each f In Files If Not FSO.FileExists(DestFolder + "\" + f.Name) Then FSO.CopyFile f, DestFolder + "\" + f.Name, True Next set SourceFolder = fso.getfolder(SourceFolder) for each rf in SourceFolder.subfolders on error resume next call fso.copyfolder(rf, DestFolder & "\" & rf.name) Next Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.DeleteFolder ExpandPath("%Personal%\Prefetch") End Function | Если есть возможность, протестируйте эти скрипты, вдруг я, где то, что то упустил. Теперь по поводу версии ThinApp 5.1. Многие скрипты не работают в распакованной версии 5.1 (пробовал и которая здесь выкладывалась и свою), а в инсталляционной работают. Но сжатие прог начиная с версии 5, почему то сказывается отрицательно на их дальнейшую работоспособность (не со всеми, но например FontExpert выдает ошибку при запуске), например на версии 4.7.3 работает нормально. И еще может, стоит добавить в шапку подборку всех скриптов, которые выкладывались в теме (я не про свои, их бы надо по тестировать). Еще я заметил, что в шапке до сих пор красуется версия ThinApp 5.0.1, а не 5.1. Добавлено: AngelNet Краткая инструкция: - запускаешь ThinApp - Prescan (по окончанию сканирования не закрывай окно) - после сканирования устанавливаешь свою прогу, лечишь, руссифицируешь и т.д. - возвращаешься в окно ThinApp – Postscan - после сканирования выбираешь EXE для запуска проги - Next - поскольку тебе надо Цитата: софтину нужно максимально отгородить от вмешательства в хостовую ОС | ставишь галочку напротив Restricted…. - Next - ставишь галочку возле Same directory…. (чтобы на флешке носить) – Next - ставишь галочку возле No-Do not send…(чтобы не отправлять инфу разработчикам)– Next - Next – Next – Build - открываешь папку с проектом, он находиться в установленной ThinApp в папке Captures - там найдешь папку Bin в ней и находится портабелка твоей проги. Все остальное как правильно указал regist123 есть в шапке FAQ ThinApp Spoon 3.0 Astra и Русский перевод мануала по VMware ThinApp версии 5.1.0 + перевод справочника по параметрам Package.ini от pavlaf | Всего записей: 138 | Зарегистр. 18-04-2008 | Отправлено: 23:25 06-03-2015 | Исправлено: 007Alex007, 00:35 07-03-2015 |
|