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

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

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

articlebot (28-02-2016 18:11): VMware ThinApp (formerly Thinstall) часть 4  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224

   

fram



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lovec
Этот уже давно проверенный способ

Всего записей: 3476 | Зарегистр. 15-01-2003 | Отправлено: 00:57 22-09-2014
Lovec



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
С выходом в Инет вроде все норм. Не лезет.
Теперь борюсь с подзависшими процессами после закрытия портативной программы. Точнее с одним.
 
Создал файл vbs, в нем код:

Код:
Function OnFirstParentExit
ExecuteExternalProcess("cmd.exe /c taskkill /F /IM " & chr(34) & "Adobe Dreamweaver CC.exe" & chr(34) & " /T")
End Function

 
Он запускается как надо после закрытия портированной программы, но не убивает процесс "Adobe Dreamweaver CC.exe".
Что здесь не так?
 
Добавлено:
Просто запущенный почти такой же код (где вместо CHR(34) кавычки) из командной строки - убивает процесс.
При закрытии программы мелькает досовское окошко с надписью, но быстро исчезает, а как добавить в этот код паузу - не придумал...

Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 01:38 22-09-2014 | Исправлено: Lovec, 01:42 22-09-2014
fram



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lovec
 
http://forum.ru-board.com/topic.cgi?forum=5&topic=31117&start=3440#14

Цитата:
из чего понятно, что выставляя full на пустую ветку с tcpip, любой процесс виртуализированного приложения окажется один на один с не сконфигурированным tcpip, т.е. без сети

Всего записей: 3476 | Зарегистр. 15-01-2003 | Отправлено: 01:47 22-09-2014
Lovec



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fram
Я понял, понял что так портативка сети не получит. Спасибо, еще раз
 
По убиению процесса, что описал выше, никто не подскажет? Что он у меня не убивается? ...

Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 20:29 22-09-2014
AVanti473



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

Цитата:
По убиению процесса, что описал выше, никто не подскажет?

 
Чтобы видеть в диспетчере задач реальные процессы, а не процесс точки входа нужно добавить в package.ini в раздел [BuildOptions] следующую запись:
ProcessExternalNameBehavior=Original
 
Чтобы определить зависший процесс, понадобиться программа Sysinternals Process Explorer в поиске которой "Find -> Find Handle or DLL (Ctrl+F)" нужно ввести:
.rw
Таким образом, будут найдены все процессы, блокирующие программу.
 
И, в заключении, скрипты для убийства процесса:
 

Код:
Function OnFirstParentExit
    Dim objWMIService, objProcess, colProcess
    Dim strComputer, strProcessKill
    strComputer = "."
    strProcessKill = "’ieuser.exe’"
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colProcess = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = " & strProcessKill )
    For Each objProcess in colProcess
        objProcess.Terminate()
    Next
End Function

 
Вместо ieuser.exe подставьте имя файла процесса, который необхоимо завершить.
 

Код:
Function OnFirstParentExit
Dim objWMIService, objProcess, colProcessList
Dim strComputer
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'Notepad.exe'")
For Each objProcess in colProcessList
    objProcess.Terminate()
Next
End Function

 
Вместо Notepad.exe подставьте имя файла процесса, который необхоимо завершить.
 
P.S. Обратите внимание на ProcessExternalNameBehavior=Original, так как процесс екзешника готовой сборки действительно может быть весьма трудно убиваем, а вот когда видны реальные процессы портабельной программы, задача упрощается.
Скрипты не мои - найдены в своё время на просторах инета...

Всего записей: 1179 | Зарегистр. 05-04-2011 | Отправлено: 21:50 22-09-2014 | Исправлено: AVanti473, 21:51 22-09-2014
Lovec



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AVanti473
Спасибо за исчерпывающий ответ. Не все понял, но возьму на заметку.
 
Сегодня моя программа уже как-то по другому ведет себя.
Вчера реагировала на оба события - и на OnLastProcessExit и на OnFirstParentExit.
Т.е. в скрипте у меня была всего одна строчка на тест:
msgbox "!!!"
Когда вставлял ее в Function OnFirstParentExit - скрипт срабатывал кучу раз, начиная от запуска, заканчивая выходом из программы.
Когда вставлял ее в Function OnLastProcessExit - срабатывал один раз, при выходе.
 
Сегодня на OnLastProcessExit вообще не реагирует, на OnFirstParentExit срабатывает один раз при выходе.
Что за бред??
 
Ладно. Пробую использовать для убийства процесса пример на  WMI что вы дали выше и запихиваю такой код в OnFirstParentExit:

Код:
Function OnFirstParentExit
strComputer = "."
msgbox "1"
strProcessKill = "'Adobe Dreamweaver CC.exe'"
msgbox "2"
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
msgbox "3"
Set colProcess = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = " & strProcessKill )
msgbox "4"
For Each objProcess in colProcess
    objProcess.Terminate()
    msgbox "!!!"
Next
msgbox "готово"
End Function

Здесь как видно каждый шаг скрипта контролируется появлением соответствующего сообщения.
Так вот. Первые 4 мессаджа появляются и на этом все!
Т.е. не то чтобы процессов "'Adobe Dreamweaver CC.exe'" вообще не найдено - тогда хотя бы появился последний мессадж, что то затыкается на цикле и выходит из него безо всяких сообщений об ошибках или успехе.
 
Вообще. Эта возможность сабжа запускать скрипт на VBS который лежит у него в папке сборки - там VBS обычный? не какой не урезанный? Ибо вчера была похожая ситуация - просто скрипт на VBS отлично работает, внутри сборки - выплевывает ошибку.
 
Добавлено:
В общем я четко знаю какой процесс мне надо убить, знаю как это сделать на VBS, но скрестить VBS и ThinApp - никак...

Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 23:29 22-09-2014
AVanti473



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

Цитата:
В общем я четко знаю какой процесс мне надо убить, знаю как это сделать на VBS, но скрестить VBS и ThinApp - никак...

 
Бегло прочитал, тороплюсь, тоже не всё понял. Давайте ещё раз попробуем так:
Ставьте в package.ini в раздел [BuildOptions] следующую запись:  
ProcessExternalNameBehavior=Original
Временно, поместите в сборку такой скрипт:

Код:
Function OnFirstSandboxOwner
 
   strMessage = "OnFirstSandboxOwner: " & GetCurrentProcessName
   MsgBox(strMessage)
 
End Function
 
Function OnFirstParentStart
 
   strMessage = "OnFirstParentStart: " & GetCurrentProcessName
   MsgBox(strMessage)
 
End Function
 
Function OnFirstParentExit
 
   strMessage = "OnFirstParentExit: " & GetCurrentProcessName
   MsgBox(strMessage)
 
End Function
 
Function OnLastProcessExit
 
   strMessage = "OnLastProcessExit: " & GetCurrentProcessName
   MsgBox(strMessage)
 
End Function
 
strMessage = "OnEveryProcess: " & GetCurrentProcessName
MsgBox(strMessage)

 
Посмотрите на результаты (какие процессы будут запускаться). После, попробуйте убить эти процессы скриптами, что я приводил выше.
 
Если ничего не поможет, то вот ещё советы одного пользователя этой ветки: http://forum.ru-board.com/topic.cgi?forum=5&topic=31117&start=3702&limit=1&m=1#1

Всего записей: 1179 | Зарегистр. 05-04-2011 | Отправлено: 11:00 23-09-2014
coherent

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

Всего записей: 3881 | Зарегистр. 20-02-2007 | Отправлено: 13:02 23-09-2014 | Исправлено: coherent, 12:11 24-09-2014
coherent

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

Всего записей: 3881 | Зарегистр. 20-02-2007 | Отправлено: 19:23 23-09-2014 | Исправлено: coherent, 12:11 24-09-2014
Lovec



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

Цитата:
У Вас в скрипте ошибка. Похоже должно быть так:  

Вы не правы. Тут формируется и передается строка, а вы внутрь строки запихали переменную - т.е. она не будет использоваться как переменная, а просто пойдет как часть строки " = strProcessKill".
Кроме того скрипт проверен не раз простым запуском - он работает и выполняет свою функцию - убивает указанный процесс.
 

Цитата:
Путь к Adobe Dreamweaver CC.exe должен быть полным.

Снова ваша неправда. Стоит посмотреть справку по этой команде. Так четко написано "имя образа процесса". И примеры есть.
 
 
 
Добавлено:
AVanti473
Сделал как вы написали. Добавил строчку "ProcessExternalNameBehavior=Original".
Какие процессы блокирует папку с портативной программой я контролирую прогой Unlocker.
До внесения изменений после закрытия программы она показывает следующие открытые процессы:

После добавления вашей строки уже другие процессы:

 
Что это означает? Что теперь используются другие процессы или что используются те же процессы, но отображаются другие?..
Ну и собственное какие мне убивать - какие в первом окне или какие во втором?
А если список этих процессов изменится? Нельзя ли как-то скопом убить все процессы, которые порадила программа?

Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 10:37 24-09-2014
coherent

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lovec
Это не мои посты!!!
У нас тут есть умелец, которого никак не вычислим и который развлекается, заходя под чьим-то логином на форумы. И это не первый раз. Люди из-за этого имели уже большие проблемы.
 
По сути. Естественно, как с taskkill, так и с WMI - это стандартные рабочие скрипты. И в теме они уже не раз выкладывались Лично я чаще использую taskkill, т.к. консольное окно для меня не проблема. И пока ни разу не сталкивался, чтобы процес не удавалось убить, что одним, что вторым способом.
 
Таки повезло, что "мои" посты были без ругательств и оскорблений!

Всего записей: 3881 | Зарегистр. 20-02-2007 | Отправлено: 12:05 24-09-2014
AVanti473



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lovec
 
В первом, представленном Вами скриншоте (без строки "ProcessExternalNameBehavior=Original") все процессы программы маскируются под процессы портабельного контейнера.
После добавления строчки, мы видим оригинальные процессы программы так, как будто она не находится в портабельном контейнере, а работает как установленная на компе. Разумеется мы видим и процесс екзешника портабельной сборки, наверняка он чуть выше места, заснятого во втором скрине, но он нам уже не нужен. Я не супер специалист в этом деле, но предположил бы, что нужно вписать в скрипты убиваемых процессов:
adobe_licutil.exe
CEPServiceManaqer. exe
LogTransport2.exe
Если конечно именно они остаются висеть, после завершения портабельной программы. Смущает:
svchost.exe
Но, может быть, при закрытии вышеперечисленных процессов, он сам отомрёт?...
 
Таким образом, я бы попробовал бы такую нелепую конструкцию:
 
Конечно же оставляем строку ProcessExternalNameBehavior=Original и вставляем в сборку фаил скрипта, например такой:
 

Код:
Function OnFirstParentExit
Dim objWMIService, objProcess, colProcessList
Dim strComputer
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'adobe_licutil.exe'")
For Each objProcess in colProcessList
    objProcess.Terminate()
Next
End Function
 
Function OnFirstParentExit
Dim objWMIService, objProcess, colProcessList
Dim strComputer
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'CEPServiceManaqer. exe'")
For Each objProcess in colProcessList
    objProcess.Terminate()
Next
End Function
 
Function OnFirstParentExit
Dim objWMIService, objProcess, colProcessList
Dim strComputer
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'LogTransport2.exe'")
For Each objProcess in colProcessList
    objProcess.Terminate()
Next
End Function

 
Названия процессов снимал ABBYY Screenshot Readeroм, так что убедитесь в правильности их записи. Объявление Dim наверняка можно вынести одной строкой, чтобы не дублировать трижды, да и сам скрипт можно записать компактнее со знанием дела, но это уже не ко мне, так как я не зря уже упоминал, что скрипты я просто находил от случая к случаю. Сам же vbs скриптами не занимаюсь, и так же иногда прошу помощи форумчан по вопросам скриптов

Всего записей: 1179 | Зарегистр. 05-04-2011 | Отправлено: 18:34 24-09-2014
Lovec



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Только что попробовал 5-ю версию программы. Впечатления только негативные. На одной и той же программе работала на порядок дольше чем 4.7 и образ создала на 300 МБ больше чем 4.7. (у 4.7 образ получился около 700 метров, у 5-й версии около 1ГБ - это все с включенной компрессией)
 
Мне интересно ваше мнение по 5-й версии.
 
AVanti473
Я понял насчет процессов отображаемых с помощью строки "ProcessExternalNameBehavior=Original".
Какие мы видим названия процессов - не важно. Скрытые или настоящие... Один фиг и те и другие зависают после закрытия программы. А поскольку без использования строки "ProcessExternalNameBehavior=Original" я вижу блокирующих процессов меньше (пусть и на самом деле внутри одного процесса прячутся многие), то и убивать их легче.
Поэтому раз разницы нет - "зачем платить больше".
Для себя решил - не использовать эту строку. Но за знания спасибо)
 
Скрипт написать для меня не проблема (в том числе объединить предложенные вами в один).
Моя то проблема в том что процессы в принципе не убиваются скриптом. Ни с использованием WMI, ни с использованием taskkill.
Щас буду читать справку по программе и продолжу эксперименты. Должно же оно как то убиваться! Наверняка какая то простая херня во всем виновата. Найдем...

Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 21:37 24-09-2014
Lovec



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Собираю портативное приложение и внутри него есть VBS, который содержит такой код:

Код:
Function OnFirstParentExit
 
Dim WshShell
set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "taskkill /F /IM " & chr(34) & "Adobe Dreamweaver CC.exe" & chr(34) & " /T"
msgbox "готово"
 
End Function

 
Функция срабатывает при закрытии приложения, но выплевывает ошибку

На реальном хосте данный VBS отрабатывает без проблем.
Что тут может быть? Не весь код VBS может выполниться внутри контейнера?
 
Добавлено:
При попытке запуска внешнего VBS скрипта

Код:
Function OnFirstParentExit
 
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("111.vbs")
 
End Function

тоже ошибка:

Хотя код простейший и никакой ошибки в нем нет.
Походу объект WshShell нельзя использовать внутри скрипта внутри контейнера.

Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 12:22 25-09-2014 | Исправлено: Lovec, 12:22 25-09-2014
Lovec



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не нашел я решения как побороть всю эту ситуацию с процессами и приделал к приложению костыль.
Написал внешний скрипт, который запускаем приложение, дожидается его закрытия и убивает все его зависшие процессы.
Пока так.

Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 17:33 25-09-2014
coherent

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

Цитата:
При попытке запуска внешнего VBS скрипта...тоже ошибка:

Запускайте vbs-файл не напрямую, а через WScript.exe.
Хотя должно работать и напрямую. Но путь к vbs-файлу должен быть полным.
Такой скрипт:
 
Function OnLastProcessExit
  Dim WshShell  
  set WshShell = CreateObject("WScript.Shell")
  WshShell.run "taskkill /F /IM MyProcess.exe /T"  
  WshShell.run "D:\...\Proba.vbs"  
End Function
 
отрабатывает нормально (т.е. и taskkill прибьет MyProcess.exe и запустится внешний Proba.vbs), но при условии, что задано
ChildProcessEnvironmentDefault=External
 
Не знаю почему, но конструкция
set WshShell = WScript.CreateObject("WScript.Shell")
под ThinApp не прокатывает.

Всего записей: 3881 | Зарегистр. 20-02-2007 | Отправлено: 21:16 25-09-2014 | Исправлено: coherent, 00:13 26-09-2014
coherent

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AVanti473
Удалось ли решить проблему с "хитрым" ключем в реестре?

Всего записей: 3881 | Зарегистр. 20-02-2007 | Отправлено: 10:52 26-09-2014
AVanti473



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

Цитата:
Удалось ли решить проблему с "хитрым" ключем в реестре?

 
Нет, не удалось. Моей компетенции здесь маловато. Я узнал одно решение от гуру здешнего форума, и оно реально работает, НО, чтобы мне самому его воспроизвести, нужны определённые навыки и знания. С другой стороны, я сам бы хотел сделать что-то попроще, но идея временно зависла в воздухе.

Всего записей: 1179 | Зарегистр. 05-04-2011 | Отправлено: 19:29 26-09-2014
007Alex007

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Вопрос к знатокам и не только.
Есть такая программа, как Duplicate Cleaner, которая может работать как в Win x86 так и Win x64. Но, если собрать эту прогу через ThinApp (5.0.1, 5.1.0),  то эта самая прога запускается только в версии x86 и ни в какую не хочет запускаться в x64. Устанавливал и запускал ThinApp на Win x86\x64, безрезультатно.
Пробовал параметры Package.ini по умолчанию и с изменением:
[BuildOptions]
LargeAddressAware=1
Wow64=0
 
В чем может быть причина?
 
P.S. Если собрать сборку в Spoon или даже в Cameyo то все работает.

Всего записей: 138 | Зарегистр. 18-04-2008 | Отправлено: 21:01 26-09-2014
Lovec



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
007Alex007
На 4-й версии не пробовали собирать? Мне 5-я показалась сильно глючной и вернулся к 4-й.

Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 21:25 26-09-2014
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224

Компьютерный форум 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