Ru-Board.club
← Вернуться в раздел «Программы»

» VMware ThinApp (formerly Thinstall) 3

Автор: coherent
Дата сообщения: 02.06.2014 12:47
AVanti473
5-ки у меня нет, поэтому проверить не могу. На 4.7.1 тоже выкидывает ошибку. Похоже, что проблема в записи вида "REG_SZ=". Остановка происходит именно на этом месте. В младших версиях эта запись имеет вид "REG_SZ=#00". Если заменить первое на второе, то все конвертируется без ошибки. Вот reg-файл [more]
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\Software]

[HKEY_LOCAL_MACHINE\Software\Classes]

[HKEY_LOCAL_MACHINE\Software\Classes\CLSID]

[HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{DD4C7B31-731D-40CB-66BD-850261EA030D}]
@="Zokito Xasifmif Object"

[HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{DD4C7B31-731D-40CB-66BD-850261EA030D}\Implemented Categories]
@=""

[HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{DD4C7B31-731D-40CB-66BD-850261EA030D}\InprocServer32]
@="C:\\WINDOWS\\system32\\msvidctl.dll"

[HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{DD4C7B31-731D-40CB-66BD-850261EA030D}\ProgID]
@="MSVidCtl.MSVidCCA.1"

[HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{DD4C7B31-731D-40CB-66BD-850261EA030D}\Programmable]
@=""

[HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{DD4C7B31-731D-40CB-66BD-850261EA030D}\TypeLib]
@="{13C03EB5-944E-5126-C3CF-154AFB5C2E55}"

[HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{DD4C7B31-731D-40CB-66BD-850261EA030D}\Version]
@="1.0"

[HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{DD4C7B31-731D-40CB-66BD-850261EA030D}\VersionIndependentProgID]
@="MSVidCtl.MSVidCCA"

[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib]

[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{13C03EB5-944E-5126-C3CF-154AFB5C2E55}]
@=""

[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{13C03EB5-944E-5126-C3CF-154AFB5C2E55}\1.0]
@="Microsoft Windows Image Acquisition Library v2.0"

[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{13C03EB5-944E-5126-C3CF-154AFB5C2E55}\1.0\0]
@=""

[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{13C03EB5-944E-5126-C3CF-154AFB5C2E55}\1.0\0\win32]
@="%SystemRoot%\\System32\\wiaaut.dll"

[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{13C03EB5-944E-5126-C3CF-154AFB5C2E55}\1.0\FLAGS]
@="0"

[HKEY_LOCAL_MACHINE\Software\Microsoft]

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows]

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion]

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall]

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Reg Organizer 5_is1]
"DisplayIcon"="C:\\Program Files\\Reg Organizer\\RegOrganizer.exe"
"DisplayName"="Reg Organizer 5.0"
"EstimatedSize"=dword:00000ff5
"Inno Setup: App Path"="C:\\Program Files\\Reg Organizer"
"Inno Setup: Icon Group"="Reg Organizer"
"Inno Setup: Setup Version"="5.3.6 (a)"
"Inno Setup: User"="AVanti473"
"InstallDate"="20140531"
"InstallLocation"="C:\\Program Files\\Reg Organizer\\"
"NoModify"=dword:00000001
"NoRepair"=dword:00000001
"QuietUninstallString"="\"C:\\Program Files\\Reg Organizer\\unins000.exe\" /SILENT"
"UninstallString"="\"C:\\Program Files\\Reg Organizer\\unins000.exe\""

[HKEY_CURRENT_USER\Software]

[HKEY_CURRENT_USER\Software\ASProtect]

[HKEY_CURRENT_USER\Software\ASProtect\SpecData]

[HKEY_CURRENT_USER\Software\ChemTable Software]

[HKEY_CURRENT_USER\Software\ChemTable Software\Reg Organizer]
"RegKeys"=hex:0f,00,00,00,00,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,24,\
43,4b,55,54,39,39,2d,43,34,4d,46,43,2d,4d,50,5a,47,37,2d,39,37,48,45,44,2d,\
53,37,39,48,44,2d,42,36,58,48,34,0a,41,56,61,6e,74,69,5f,34,37,33,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,ff

[HKEY_CURRENT_USER\Software\ChemTable Software\Reg Organizer\ExploredFoldersEx]

[HKEY_CURRENT_USER\Software\ChemTable Software\Reg Organizer\ExploredKeysEx]
"HKEY_CURRENT_USER\Software"=dword:00000ecf

[HKEY_CURRENT_USER\Software\ChemTable Software\Reg Organizer\SettingsEx]
"ActiveMode"=dword:00000008
"ApplicationsUninstallerFormHeigth"=dword:00000207
"ApplicationsUninstallerFormMaksimized"=dword:00000000
"ApplicationsUninstallerFormWidth"=dword:00000283
"ChangesLogsFileTreeWidth"=dword:000000ed
"ChangesLogsIniTreeWidth"=dword:000000ed
"ChangesLogsRegTreeWidth"=dword:000000ed
"ExpressCheckDate"=hex:06,20,2a,8c,cb,67,e4,40
"Language"="Russian"
"MainFormHeigth"=dword:0000028a
"MainFormMaksimized"=dword:00000000
"MainFormWidth"=dword:0000041a
"ModesBarVisible"=dword:00000001
"PreviousCommentsCleanupDate"=hex:31,a0,8e,90,cb,67,e4,40
"RegPartsPanelW"=dword:0000009d
"RegTreeViewW"=dword:000000be[/more]
Проверьте все ли правильно.

Добавлено:
SLasH
Лучше, наверное, использовать OnFirstSandboxOwner, а не OnFirstParentStart.
Автор: SLasH
Дата сообщения: 02.06.2014 13:07
coherent 14:47 02-06-2014
Цитата:
Лучше, наверное, использовать OnFirstSandboxOwner, а не OnFirstParentStart

Именно OnFirstSandboxOwner я и использовал в своих примера, на предыдущей странице по ссылкам. OnFirstSandboxOwner вызываться должна 1 раз.
А OnFirstParentStart просто скопипастил.
Автор: Artem_Butenko
Дата сообщения: 03.06.2014 00:31
Ребята, прошу, пожалуйста, сильно не ругать за вопрос. На одном из форумов нашел [more=*.vbs-скрипт]Function OnLastProcessExit
'' Объявление переменных скрипта.
Dim WSHNetwork, WSHShell, objFSO

'' Глобальные переменные скрипта.
Set WSHNetwork = CreateObject("WScript.Network")
Set WSHShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Shell.Application")

'' Переменные окружения текущего скрипта.
Origin = GetEnvironmentVariable("TS_ORIGIN") '' Переменная, позволяющая узнать оригинальное имя исполняемого файла.

'' Имя исполняемого файла сборки.
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 & Chr(92) & SandboxName
End If

'' Тестовое сообщение.
MsgBox "Полный путь к исполняемому файлу сборки = " & Origin & vbCrLf & "Исполняемый фал сборки = " & ExeName & vbCrLf & "Полный путь к каталогу ""песочницы"" = " & SandboxPath,,"VMware ThinApp - Тестовое сообщение"

End Function[/more], который позволяет записать в переменную путь к "песочнице".

Вопрос в том, каким образом модернизировать этот скрипт, чтобы он позволял, извлекать из виртуального контейнера (виртуальной среды) некоторый исполняемый файл, например, "MyProgram.exe", в каталог "песочницы" (реальная файловая система) и запускать его на исполнение.

Сам в VBS не шибко разбираюсь, но, м.б. у Вас есть идеи. Думаю в ветке по VBS, меня немного не поймут с нашими:
Function OnLastProcessExit
...
End Function

Оговорюсь, в виртуальной среде файл находится по пути "%ProgramFilesDir%\Data\MyProgram.exe", при извлечении в реальную систему (по завершению работы портабельного приложения), он должен попасть в песочницу "Каталог_песочницы\MyProgram.exe".
Автор: AVanti473
Дата сообщения: 03.06.2014 07:05

Цитата:
сильно не ругать за вопрос


Artem_Butenko

А меня извините за любопытство. Интересно зачем такая манипуляция внутри песочницы? Получается, программа отработала, а по закрытию скрипт ThinApp выкинул екзкшник из виртуальной среды в реальную, но в ту же песочницу? Просто сижу и думаю, а что дальше можно или нужно делать с этим екзешником?


Цитата:
извлекать из виртуального контейнера (виртуальной среды) некоторый исполняемый файл, например, "MyProgram.exe", в каталог "песочницы" (реальная файловая система) и запускать его на исполнение.


А его по извлечению ещё и запустить предполагается в реальной системе?... Зачем тогда изначально контейнер ThinApp?

Заранее прошу прощения, что не в моих силах помочь с решением Вашего вопроса, мне просто он показался интересным и любопытным!
Автор: coherent
Дата сообщения: 03.06.2014 10:15
Artem_Butenko
Если это не очень большой секрет, зачем это нужно. И не столько для любопытства, от этого зависит реализация скрипта.
Плюс какая последовательность действий? После завершения сборки вынести MyProgram.exe в песочницу и запустить на исполнение? А дальше что? MyProgram.exe останется в песочнице или его надо удалять по завершении работы? Это один и тот же файл или каждый раз создается разный? Если один и тот же, зачем его каждый раз выносить? И т.д....
Автор: Artem_Butenko
Дата сообщения: 03.06.2014 14:38
coherent

Файл один и тот же, вроде как понятно сформулировал. Портабельное приложение завершает работу, "MyProgram.exe" экспортируется в "песочницу" и выполняется, после, - удаляется. Все. Если есть идеи, пожалуйста, помогите.

Добавлено:

Цитата:
Если это не очень большой секрет, зачем это нужно.


Пишу на AutoIt, т.н. "ThinApp_FileCleaner", проект готов, осталось протестировать его, обещаю выложить здесь же, не жмот. Теперь только одна проблема, изложенная выше. Есть варианты?
Автор: coherent
Дата сообщения: 03.06.2014 19:27
Artem_Butenko
Есть одна проблема и возможно она принципиальная. Закинуть MyProgram.exe в песочницу не проблема, а вот запустить ее там во время работы сборки (выполнение скрипта - это все еше работаюшая сборка) невозможно. Возможно есть пути решения этого, но я их не знаю. Если Вас устраивает, то рабочий вариант такой: MyProgram.exe (OnLastProcessExit) выносится из виртуальной среды в реальную рядом с исполняемым файлом сборки и запускается, а по закрытию удаляется.
Автор: SLasH
Дата сообщения: 03.06.2014 21:41
Artem_Butenko
Обязательно извлекать в песочницу?
Я приводил примеры в посте http://forum.ru-board.com/topic.cgi?forum=5&topic=31117&start=3500#18
там по ссылкам есть пример копирования exe-шника изнутри наружу в папку %TEMP% и запуска в реальной системе.
Автор: bumburbia
Дата сообщения: 03.06.2014 23:00
При запуске портативки (Password Recovery Bundle) рядом с песочницей появляется log-файл (bundle.log), при стационарной установке файл находится в папке с программой. Как заставить его "не высовываться" дальше песочницы ?
Автор: SLasH
Дата сообщения: 03.06.2014 23:15
Возможно изоляцию поставить для %ProgramFilesDir% в Full.
Автор: AVanti473
Дата сообщения: 04.06.2014 07:07
coherent, SLasH, ещё раз хотел поблагодарить за ценную информацию! К сожалению, или к счастью, дело оказалось не в импорте значений реестра в реальную файловую систему, но то, что я узнал с вашей помощью, для меня более ценно, чем проект, которым я занимаюсь в данный момент!
С Reg Organizer всё оказалось до банального просто! И хотя сперва я полез в дебри анпакеров, для снятия защиты ASProtect 2.1x SKE -> Alexey Solodovnikov [Overlay] с RegOrganizer.exe, но дело оказалось куда проще! Просто, ThinApp v5.0.0 Build 1391583, по каким-то невероятным причинам, не может собрать полнофункциональный портабл этой программы... Пересборка в ThinApp v4.7.3-891762 (7101) решает все проблемы!
Слукавил. Почти все проблемы. ))) Одна осталась, её суть я описал здесь: http://forum.ru-board.com/topic.cgi?forum=55&topic=11671&start=2280#20
Если в двух словах, то в реальной системе, по пути:
C:\Documents and Settings\Юзверь\AppData\Local
должны появляться папки:
ChemTable Software\Reg Organizer
Если они появляются в песочнице через включение в сборку их изоляции в %Local AppData%, то перестаёт корректно работать функция оптимизации реестра!
Вот подавай им реальную систему и всё тут!
Это как раз совсем не сложно, сложно убрать эти следы после работы программы!
Нужен скрипт, и батник к нему. Подсобите пожалуйста, пока я себе окончательно не свернул голову с этой программулиной... )))
P.S. Есть нюанс! Оптимизация (она же дефрагментация) реестра, всегда завершается мгновенной автоматической перезагрузкой! Успеет ли сработать такой скрипт, убрав следы прибывания программы, или нужно будет чтобы следы убирались при её следующем запуске, а в описании к портаблу давать юзерам инфу об обязательном запуске проги после подобной чистки? А может скрипт будет удалять вышеуказанные папки и при старте и при запуске, чтобы уже наверняка?

Добавлено:
Пока, по удалению, я нашёл лишь это:


Код: <%
dim filesys, demofolder
set filesys = CreateObject ("Scripting.FileSystemObject")
set demofolder = filesys.GetFolder("C:\Documents and Settings\Юзверь\AppData\Local\ChemTable Software")
demofolder.Delete
%>
Автор: bumburbia
Дата сообщения: 04.06.2014 07:56

Цитата:
Возможно изоляцию поставить для %ProgramFilesDir% в Full.

Не помогает, log-файл всё равно рядом с песочницей.
Автор: AVanti473
Дата сообщения: 04.06.2014 08:01

Цитата:
Не помогает, log-файл всё равно рядом с песочницей.


Соури, не вчитывался, на вскидку, может это поможет:
ВPackage.ini в [BuildOptions] прописать
CachePath=<sandbox_path>

Или встречал вываливание файлов из песочницы в случае запуска портабельной программы чёрт знает из каких дебрь папок. Запустите напрямую с корня диска и лог должен оказаться в песочнице. Кажись на это как-то влияет общая длинна символов до файла, и опять же - латиница, кирилица в названиях папок...

P.S. Такой же экзотический косяк я сам наблюдал, но стоило только запустить портабельную программу с корня диска, как всё прошло. Впрочем и из других мест тоже беспроблемно запускалась, но вот с какого-то одного (уже не вспомню, помню что путь длинным был), запускалась с вываливанием файлов из песочницы к екзешнику. Тогда не придал значения. Решил что это баг и его исправят в следующих версиях ThinApp...
Автор: bumburbia
Дата сообщения: 04.06.2014 08:17

Цитата:
CachePath=<sandbox_path>

Это я уже проделывал, запуск из корня диска тоже ничего не меняет...
Автор: AVanti473
Дата сообщения: 04.06.2014 08:20

Цитата:
запуск из корня диска тоже ничего не меняет...


Ясно. Попробуйте пересобрать проект на другой, более ранней версии ThinApp. Может совет и нелепый, но, а вдруг?
Автор: coherent
Дата сообщения: 04.06.2014 11:02
Artem_Butenko
Если устраивает вынос MyProgram.exe рядом с ехе-файлом сборки, то вот
[more=скрипт..]Option Explicit

Dim fso, Origin, SourcePath, MyProgPath, SandboxParent, SandboxName, SandboxPath, MyProgSource, MyProgDest, id

Function OnLastProcessExit

Set fso = CreateObject("Scripting.FileSystemObject")
Origin = GetEnvironmentVariable("TS_ORIGIN")
SourcePath = Left(Origin, InStrRev(Origin, "\") - 1)
MyProgPath = ExpandPath("%ProgramFilesDir%\Data")

SandboxParent = GetBuildOption("SandboxPath")
SandboxName = GetBuildOption("SandboxName")
If SandboxParent = "." Then
SandboxPath = SourcePath & Chr(92) & SandboxName
Else
SandboxPath = SandboxParent & Chr(92) & SandboxName
End If

MyProgSource = MyProgPath & "\MyProgram.exe"
MyProgDest = SourcePath & "\MyProgram.exe"

If not fso.FileExists(MyProgDest) then
fso.CopyFile MyProgSource, MyProgDest
End If

id = ExecuteExternalProcess(MyProgDest)
WaitForProcess id, 0

If fso.FileExists(MyProgDest) Then
fso.DeleteFile(MyProgDest)
End if

End Function [/more]

Добавлено:
AVanti473
Попробуйте [more=так..]Function OnLastProcessExit
Dim fso, ChemTableFolder
Set fso = CreateObject("Scripting.FileSystemObject")
ChemTableFolder = ExpandPath("%Local AppData%\ChemTable Software")
If fso.FolderExists(ChemTableFolder) then
fso.DeleteFolder(ChemTableFolder)
End if
End Function[/more]
Лично я не сторонник портабелизации такого рода програм, не знаеш где, когда и на какие грабли наступишь. Да и собственно оптимизация реестра уже даже для ХР не дает ощутимого результата, влияющего на скорость. ИМХО, конечно.
Автор: AVanti473
Дата сообщения: 04.06.2014 11:59
coherent, за решение благодарю, буду пробовать!!!


Цитата:
Лично я не сторонник портабелизации такого рода програм


[more=офтоп]Поверьте на слово и я тоже! Я писал об этом чуть ранее здесь: http://forum.ru-board.com/topic.cgi?forum=55&topic=11671&start=2240#5
Но, программа мне достаточно неплохо знакома, а следовательно я физически могу проверить больше функционала, чем начинающий работать с ней. К тому же, при всём том, что программа сложна к портабелизации, она тем же и интересна! Хорошо это, или плохо, я не штампую сборки на ура пачками, а стараюсь изыскивать время для интересных лично для меня проектов, на которые этого самого времени не жалко.
По поводу (оптимизации) дефрагментации реестра: Эта функция важная! К сожалению, я не знаю как доказать это фактами. Вы наверняка когда-нибудь искали в реестре нужное значение через regedit, верно? Вспомните сколько это занимает времени! Ради интереса, я сейчас открыл редактор реестра, углубился на пару разделов в HKLM, вытащил оттуда значение ключа BCD00000000 и обозначил его в поиск. Секунд так тридцать ждал результата! Это при том, что сам реестр на компьютере относительно немного весит, а комп в разы быстрее управляется с казалось бы более сложными заданиями. Следуя рассуждениям тех, кто говорит, что оптимизация реестра ничего не даёт, проведённый мною пример поиска должен выполнятся за доли секунды, ведь какая разница где значения реестра, он же относительно небольшой! И вправду, простой экспорт в фаил целой ветки HKLM занимает всего секунд пять! Но, когда речь идёт о поиске - тут дело иначе обстоит! Делаем банальный вывод: винда постоянно работает с реестром, в том числе и в режиме поиска, и чем оптимизированнее будут его файлы на физическом диске, тем меньше задержки во время этого самого поиска! Если часть файла реестра "грубо скажем" на одной стороне HDD, а часть на другой, то беганье считывающей головки туда-сюда пусть на доли секунды, но замедлит процесс работы! Не говоря уже про сбойные сектора и потери значений ключей. Вспомним легендарную ХР, и её штатный дефрагментатор с графическим фейсом! Там наглядно видно, что системные файлы почти всегда сосредотачиваются в одной зоне диска, которая, в следствии частой работы с ней (чтение/запись) более стабильна, чем менее используемые сектора этого же диска! Собственно там лучше и находиться всем файлам реестра, а не где-то быть разбросанными по диску.
Касательно оптимизаторов реестра - во времена выхода старых версий Reg Organizer, лучшим оптимизатором был Auslogics Registry Defrag, но Reg Organizer от него не отставал! К тому же, раз эта функция есть в Reg Organizer, так почему бы ей и не пользоваться )))[/more]

Добавлено:
coherent

Скрипт работает! Благодарю! Есть одно но, как я и предполагал, увы он не успевает удалить папку. Система, после оптимизации, автоматом уходит в перезагрузку, а после перезагрузки папка на месте! Если без оптимизации создать там папку, то по завершению программы она удаляется без проблем.
И ещё такой момент. В реальной системе тоже может находиться аналогичная, инсталлированная программа, и папка ChemTable Software может содержать её данные, что спутает работу портабельной версии. Возможно, при старте тоже надо проверять наличие этой папки и удалять её?
Автор: coherent
Дата сообщения: 04.06.2014 13:47
AVanti473

Цитата:
Есть одно но, как я и предполагал, увы он не успевает удалить папку. Система, после оптимизации, автоматом уходит в перезагрузку, а после перезагрузки папка на месте! Если без оптимизации создать там папку, то по завершению программы она удаляется без проблем.

Думаю, что проблема не в том, что скрипт не успевает удалить папку, а потому что программа закрывается не естественным для нее путем, а ее закрывает система уходя на перезагрузку. Как-то так, не углубляясь в подробности. Хотя повторюсь, с нюансами работы Reg Organizer-а не знаком.

Цитата:
И ещё такой момент. В реальной системе тоже может находиться аналогичная, инсталлированная программа, и папка ChemTable Software может содержать её данные, что спутает работу портабельной версии. Возможно, при старте тоже надо проверять наличие этой папки и удалять её?

Наверное ее надо не удалять, а бекапить при старте (OnFirstSandboxOwner) и по завершению работы восстанавливать. Но в свете того, что папка не удаляется при перезагрузке, это будет тяжело сделать.
Весь вопрос в том, стоит ли овчинка выделки?
Автор: AVanti473
Дата сообщения: 04.06.2014 16:49

Цитата:
Весь вопрос в том, стоит ли овчинка выделки?


В любом случае у меня есть большое желание добить реализацию этого софта! Тем более, что и так уже всё важное работает, за исключением этой мелочи.


Цитата:
Наверное ее надо не удалять, а бекапить при старте (OnFirstSandboxOwner) и по завершению работы восстанавливать.


Собственно, если её вырезать то реальной программе на это чхать при старте. Никакой особой смысловой нагрузки в ней нет.
Но там хранятся бекапы:
C:\Documents and Settings\Юзверь\AppData\Local\ChemTable Software\Reg Organizer\backups

Возможно что надо бы бекапить... Что предложите?

Кстати, если даже в скрипте заменить OnLastProcessExit на OnFirstParentExit, всё одно до перезагрузки папка не успевает удалиться... Как бы это решить... Может можно как-то организовать паузу до начала перезагрузки?
Автор: Artem_Butenko
Дата сообщения: 04.06.2014 18:01
coherent


Цитата:
Если устраивает вынос MyProgram.exe рядом с ехе-файлом сборки, то вот  
скрипт..


Печально, не работает...

SLasH


Цитата:
Обязательно извлекать в песочницу?
Я приводил примеры в посте http://forum.ru-board.com/topic.cgi?forum=5&topic=31117&start=3500#18
там по ссылкам есть пример копирования exe-шника изнутри наружу в папку %TEMP% и запуска в реальной системе.


Да, извлекать в песочницу обязательно. Сам в VBS не разбираюсь. Надеюсь на Вашу добрую помощь!
Автор: SLasH
Дата сообщения: 04.06.2014 18:08
AVanti473 18:49 04-06-2014
Цитата:
сё одно до перезагрузки папка не успевает удалиться... Как бы это решить...

До запуска программы - прописать в автозагрузку удаление папки.

Код: Dim TmpDir: TmpDir = ExpandPath("%TEMP%")
Dim AutoRunScript: AutoRunScript = TmpDir & "\auto_run.bat"
Call WaitForProcess(ExecuteExternalProcess("cmd.exe /C reg add ""HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce"" /v Test /d " & chr(34) & AutoRunScript & chr(34)), 0)
Dim FSO: Set FSO = CreateObject("Scripting.filesystemObject")
const ForReading = 1, ForWriting = 2, ForAppending = 8
f = FSO.OpenTextFile(AutoRunScript, ForWriting, true)
f.WriteLine("rd /S /Q ""%AppData%\Local\ChemTable Software\Reg Organizer""")
f.Close
Автор: AVanti473
Дата сообщения: 04.06.2014 19:44

Цитата:
До запуска программы - прописать в автозагрузку удаление папки.


SLasH Кстати да! Золотая у Вас голова!!! Получается после перезагрузки стартанёт одноразовый запуск удаления папки. Ок! Но, а если нужно было наоборот, забекапить папку (если такая существовала), убрать её оттуда (опять же, если она существовала) перед запуском программы, удалить папку появившуюся в следствии работы портабельной программы, и вернуть забекапленную на место после перезагрузки? Возможно?

Если такое возможно, Вас не затруднит обозначить в скрипте комментарии того, как и для чего будут выполняться определённые команды?

И, я всё правильно понял по вашему скрипту?
[more=вот]
Код: ' Присваеваем папке TEMP значение TmpDir
Dim TmpDir: TmpDir = ExpandPath("%TEMP%")
' Говорим что в папке TEMP появится фаил auto_run.bat и эта конструкция называется AutoRunScript
Dim AutoRunScript: AutoRunScript = TmpDir & "\auto_run.bat"
' Вызываем работу с коммандной строкой и записываем в реестр значение автозапуска
Call WaitForProcess(ExecuteExternalProcess("cmd.exe /C reg add ""HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce"" /v Test /d " & chr(34) & AutoRunScript & chr(34)), 0)
Dim FSO: Set FSO = CreateObject("Scripting.filesystemObject")
const ForReading = 1, ForWriting = 2, ForAppending = 8
' Записываем в auto_run.bat строку удаления нужной папки
f = FSO.OpenTextFile(AutoRunScript, ForWriting, true)
f.WriteLine("rd /S /Q ""%AppData%\Local\ChemTable Software\Reg Organizer""")
f.Close
Автор: Artem_Butenko
Дата сообщения: 04.06.2014 19:58
SLasH


Цитата:
Не проверял, написал вручную на коленке


Не робит, в чем проблема не пойму?

Добавлено:

Цитата:
Копируем папку изнутри наружу: "C:\Progs" в песочницу


Папку в "песочницу" копировать из виртуальной среды не нужно, только файлы из этой папки, в нашем случае "MegaProga.exe".
Автор: coherent
Дата сообщения: 04.06.2014 20:31
Artem_Butenko

Цитата:
Печально, не работает...

Странно, у меня работает. Я ж его не просто написал, как говорится на коленке, и выложил, а протестировал перед этим. И в чем проявляется неработоспособность? Может Вы переменные меняете, пути не соответствуют?
Автор: Artem_Butenko
Дата сообщения: 04.06.2014 21:31
coherent

Попробую еще. Поясните о режимах изоляции для каталога с "MyProgram.exe".
Автор: SLasH
Дата сообщения: 04.06.2014 22:49
AVanti473 21:44 04-06-2014
Цитата:
Но, а если нужно было наоборот, забекапить папку (если такая существовала), убрать её оттуда (опять же, если она существовала) перед запуском программы, удалить папку появившуюся в следствии работы портабельной программы, и вернуть забекапленную на место после перезагрузки? Возможно?

Да. Завтра напишу, как.

Цитата:
И, я всё правильно понял по вашему скрипту?

Всё правильно.
Автор: coherent
Дата сообщения: 04.06.2014 22:54
Artem_Butenko

Цитата:
Поясните о режимах изоляции для каталога с "MyProgram.exe".

Без разницы. Но если предметно, то MyProgram.exe находится здесь: %ProgramFilesDir%\ Data\MyProgram.exe. Глобальная изоляция - Merged, изоляция папки Data - Full, папки %ProgramFilesDir% - явно не задана, значит Merged. Может быть и WriteCopy.
Автор: Artem_Butenko
Дата сообщения: 04.06.2014 23:41
coherent

Прошу перед Вами прощения, можно взглянуть на Ваш проект целиком?

Добавлено:
Всё работает! Спасибо за наставление на путь истинный. Но опять таки, можно ли сделать так, чтобы, файлы экспортировались в "песочницу" и запускался исполняемый файл ThinApp_FileCleaner.exe? Всего файлов два:
ThinApp_FileCleaner.exe
ThinApp_FileCleaner.ini
Условие, если в каталоге песочницы уже есть файл ThinApp_FileCleaner.ini, - то он не будет перезаписан при экспорте из виртуальной среды. Вся надежда на Вас, плагин уже готов, осталось только доделать VBS-скрипт.
Автор: SLasH
Дата сообщения: 05.06.2014 11:13
Artem_Butenko

Цитата:
осталось только доделать VBS-скрипт

Скрипт в студию и будем доделывать.
Автор: coherent
Дата сообщения: 05.06.2014 11:33
Artem_Butenko

Цитата:
можно ли сделать так, чтобы, файлы экспортировались в "песочницу" и запускался исполняемый файл ThinApp_FileCleaner.exe?

И все же вопрос, который остался без ответа, это принципиально или просто "хотелка", чтобы именно в песочницу?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149

Предыдущая тема: Проблемы с закачкой


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.