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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

   

coherent

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bumburbia
Странно, это же рабочий скрипт. Почему он выкидывает ошибку?
На всякий случай, " Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")" - это одна строка. И "Set colProcess = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = " & strProcessKill)" - это тоже одна строка. Кстати 7-я, в которой якобы ошибка.

Всего записей: 3881 | Зарегистр. 20-02-2007 | Отправлено: 17:15 17-02-2015
bumburbia



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
coherent
Скрипт запускается без ошибки, если в строке strProcessKill = "WINWORD.EXE" название процесса заключить ещё в одни кавычки - "'WINWORD.EXE'", но, увы, завершает процесс при запуске сборки (если открыт Word - прибьёт), а при закрытии - молчок, тот же эффект и с этим скриптом  

Код:
 
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 = 'WINWORD.EXE'")
For Each objProcess in colProcessList
    objProcess.Terminate()
Next
End Function  
 

Я просмотрел стр. 186-188 и, как понял, всё же эти скрипты срабатывают не всегда, но тут-то процесс убивается, только не тогда, когда надо ).

Всего записей: 2082 | Зарегистр. 12-02-2011 | Отправлено: 18:33 17-02-2015
coherent

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

Цитата:
завершает процесс при запуске сборки

Это что-то из области фантастики! Ведь по определению функция OnFirstParentExit срабатывает при завершении родительского процесса (ов). Да и с дополнительными кавычками мне не понятно.
Для чистоты эксперимента можно добавить в скрипт вывод сообщения, типа MsgBox "Bla-bla-bla", и посмотреть, когда оно будет появляться. Потому что я не представляю, как функция OnFirstParentExit может сработать при запуске сборки!

Всего записей: 3881 | Зарегистр. 20-02-2007 | Отправлено: 19:39 17-02-2015
bumburbia



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
coherent
Bla-bla-bla появляется сразу (почти сразу). Дело, наверное, в том, что сборка запускается с помощью лаунчера, который сначала запускает exe'шник, заменяющий рег. данные на новые, а затем саму программу, т.е. запускаешь PROMTProfessional .exe (лаунчер), затем срабатывает Reactivation.exe (обновляет регистрацию) и, наконец,  PROMT Professional .exe (сама программа), два первых процесса после срабатывания выгружаются и, скорее всего, на это реагирует наш скрипт, запускаясь и прибивая WINWORD.EXE (если таковой запущен).
 
Добавлено:
про кавычки

Всего записей: 2082 | Зарегистр. 12-02-2011 | Отправлено: 20:15 17-02-2015
coherent

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bumburbia
Ха, мы бы долго еще искали причину, если бы не выяснилось, что сборка не совсем стандартно запускается. Может в этом случае имеет смысл все запускать скриптом, который запустит все в нужном порядке, подождет завершения работы PROMT Professional .exe и тогда запустит скрипт "убиения".
Про кавычки спасибо!

Всего записей: 3881 | Зарегистр. 20-02-2007 | Отправлено: 20:34 17-02-2015
bumburbia



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
coherent
Поиск причины, по крайней мере для меня, был полезен, узнал что-то новое. А сборку, думаю оставить как есть, просто кто-то будет работать с Word'ом, запустит эту сборку PROMT'а, что-то переведёт, закроет PROMT и хана наработанным в Word'е данным ). В принципе, если не лезть в диспетчер задач, то и не узнаешь об этом подвисшем процессе, ну а кому приспичит, можно завершить вручную.  
Иногда зависшие процессы называются explorer.exe или svchost.exe, вот как быть с ними ?

Всего записей: 2082 | Зарегистр. 12-02-2011 | Отправлено: 21:01 17-02-2015 | Исправлено: bumburbia, 21:02 17-02-2015
007Alex007

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто может подсказать, как переделать скрипт, чтобы он запускался в ThinApp. При запуске упакованной проги появляются ругательства на вторую строку.  
Сразу скажу, что Function я прописывал, просто выкладываю чистый скрипт, который нормально срабатывает в win. А вообще скрипт я взял отсюда:Скрипт  

Код:
 
Dim WshShell  
arrProcs = Array("realplay.exe", "rndlresolversvc.exe", "realsched.exe", "RealUpgrade.exe")
Set WshShell = WScript.CreateObject("WScript.Shell")
For i = 0 To Ubound(arrProcs)
    intTemp = WshShell.Run("taskkill /f /IM " & arrProcs(i), 0, True)
    Next
 

 
coherent
Подскажите, как в вашем скрипте, вот в этой строке прописать несколько процессов

Код:
 
strProcessKill = "’WINWORD.EXE’"
 

Всего записей: 138 | Зарегистр. 18-04-2008 | Отправлено: 22:11 18-02-2015 | Исправлено: 007Alex007, 22:13 18-02-2015
coherent

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

Цитата:
При запуске упакованной проги появляются ругательства на вторую строку.

Хорошо бы посмотреть, что за ругательство. Как правило, там прямо указывается какая ошибка.
Наверное, не мешало бы определить массив:

Код:
Dim arrProcs
arrProcs = Array("realplay.exe", "rndlresolversvc.exe", "realsched.exe", "RealUpgrade.exe")


Цитата:
Подскажите, как в вашем скрипте, вот в этой строке прописать несколько процессов

Наверное никак, это строковая переменная. Но можно пойти по пути простого повторения удаления для всех 4-х процессов или использовать массив с добавлением цикла перебора имен процессов.

Всего записей: 3881 | Зарегистр. 20-02-2007 | Отправлено: 10:36 19-02-2015
007Alex007

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

Цитата:
Хорошо бы посмотреть, что за ругательство

 
Source: Ошибка выполнения Microsoft VBScript
Description: Требуется объект: 'WScript'
File: (null)
Line 3, Character 0
at:
 
Line 3 - это та же строка:
arrProcs = Array("realplay.exe", "rndlresolversvc.exe", "realsched.exe", "RealUpgrade.exe")
 
пробовал убрать Array, тогда:
Source: Ошибка компиляции Microsoft VBScript
Description: Предполагается наличие ')'
Line 2, Character 26
at: arrProcs = ("realplay.exe", "rndlresolversvc.exe", "realsched.exe", "RealUpgrade.exe")  
 

Цитата:
повторения удаления для всех 4-х процессов

Не получается вылезает ошибка. Попробовал создать 4 скрипта для каждого процесса, сработало. Но это как то слишком.
 

Цитата:
использовать массив с добавлением цикла перебора имен процессов

Можно по подробнее, как это сделать?
 

Всего записей: 138 | Зарегистр. 18-04-2008 | Отправлено: 13:02 19-02-2015 | Исправлено: 007Alex007, 13:16 19-02-2015
coherent

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
007Alex007
Я уже с таким сталкивался. ThinApp почему-то не любит конструкцию wscript.CreateObject. Попробуйте определить WSHShell так:

Код:
Set WSHShell = CreateObject("WScript.Shell")

Массивами в скриптах, честно признаюсь, не пользовался. Но из общих соображений массив следует определить. Либо так, как я написал, либо как-то так:

Код:
Dim arrProcs(3)
arrProcs(0) = "realplay.exe"
и т.д.


Цитата:
Не получается вылезает ошибка. Попробовал создать 4 скрипта для каждого процесса, сработало. Но это как то слишком.

Под повторением имел в виду повторить кусок кода 4 раза для всех процессов

Код:
Set colProcessList = objWMIService.ExecQuery _  
     ("Select * from Win32_Process Where Name = 'realplay.exe'")  
 For Each objProcess in colProcessList  
     objProcess.Terminate()  
 Next  

Сам скрипт взять из поста bumburbia на этой странице выше.

Цитата:
Можно по подробнее, как это сделать?

Сейчас не имею возможности что-либо проверить, но из общих соображений, например как-то так:

Код:
For i = 0 To Ubound(arrProcs)
   Set colProcessList = objWMIService.ExecQuery _  
        ("Select * from Win32_Process Where Name = 'arrProcs(i)'")  
    For Each objProcess in colProcessList  
        objProcess.Terminate()  
    Next
Next

Всего записей: 3881 | Зарегистр. 20-02-2007 | Отправлено: 14:05 19-02-2015 | Исправлено: coherent, 14:07 19-02-2015
007Alex007

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо большое за помощь, но к сожалению  не работает:
- после замены строки на Set WSHShell = CreateObject("WScript.Shell") скрипт больше не ругается, но создается впечатление, что скрипт, внутри зависших процессов, создает такие же и благополучно их удаляет, а реальные процессы остаются висеть  
- использование в скрипте WMI приводит к ошибке
  Source: Ошибка выполнения Microsoft VBScript
  Description: Требуется объект: 'objWMIService'
  File: (null)
  Line 6, Character 3
  at:
- по поводу твоего скрипта
Цитата:
повторить кусок кода 4 раза для всех процессов
, что то похожее о чем я написал про замену строки.
 
Я решил пойти другим путем. Идея такая, скрипт arrProcs копируется из портабельной проги в реальную систему, запускается, а после удаляется. В работе участвуют два скрипта:
1 - arrProcs.vbs - будет удалять зависшие процессы, а после выполнения сам удалится
2 - RUN.vbs - который будет копировать первый в реальную систему и запускать его
 
1-Скрипт arrProcs.vbs:

Код:
Dim WshShell  
arrProcs = Array("realplay.exe", "rndlresolversvc.exe", "realsched.exe", "RealUpgrade.exe")  
Set WshShell = WScript.CreateObject("WScript.Shell")  
For i = 0 To Ubound(arrProcs)  
    intTemp = WshShell.Run("taskkill /f /IM " & arrProcs(i), 0, True)  
    Next  
Set objFSO = CreateObject("Scripting.FileSystemObject")
    objFSO.DeleteFile("C:\arrProcs.vbs")

 
2- Скрипт RUN.vbs

Код:
Function OnFirstParentStart  
Const OverwriteExisting = True
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  objFSO.CopyFile ExpandPath("%Personal%\arrProcs.vbs") , ExpandPath("C:\"), OverwriteExisting
End Function
 
Function OnFirstParentExit  
ExecuteExternalProcess "WSCRIPT.EXE " & Chr(34) & "C:\arrProcs.vbs" & Chr(34)
End Function

 
Все работает, ни каких окон не вылезает, скрипт ни на что не ругается.
 
Но все таки хотелось, чтобы это все выполнялось в одном скрипте.
 

Всего записей: 138 | Зарегистр. 18-04-2008 | Отправлено: 22:48 19-02-2015 | Исправлено: 007Alex007, 23:33 19-02-2015
coherent

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

Цитата:
- после замены строки на Set WSHShell = CreateObject("WScript.Shell") скрипт больше не ругается, но создается впечатление, что скрипт, внутри зависших процессов, создает такие же и благополучно их удаляет, а реальные процессы остаются висеть

taskkill должен запускаться как внешний процесс. Для этого или задать ChildProcessEnvironmentDefault=External или включить taskkill в исключения ChildProcessEnvironmentExceptions=taskkill.ехе

Всего записей: 3881 | Зарегистр. 20-02-2007 | Отправлено: 23:45 19-02-2015
007Alex007

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
coherent
У меня в сборке уже был включен параметр ChildProcessEnvironmentDefault=External, прописал туда еще и ChildProcessEnvironmentExceptions=taskkill.ехе, но все равно не работает.  
taskkill.ехе теперь появляется в диспетчере задач, и одновременно с этим появляются новые несколько realplay.exe, которые как мне кажется потом сами без помощи закрываются, а taskkill закрывает только один или два процесса, а остальные причем одни и те же (rndlresolversvc.exe, realsched.exe) продолжают висеть.  
 
Вот если бы в скрипт прописать к taskkill параметр /T (Завершение указанного процесса и всех его дочерних процессов)  
вот в эту строку:
 intTemp = WshShell.Run("taskkill /f /IM " & arrProcs(i), 0, True)
пробовал так не работает:
 intTemp = WshShell.Run("taskkill /f /IM /T" & arrProcs(i), 0, True)

Всего записей: 138 | Зарегистр. 18-04-2008 | Отправлено: 00:37 20-02-2015
coherent

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

Цитата:
У меня в сборке уже был включен параметр ChildProcessEnvironmentDefault=External, прописал туда еще и ChildProcessEnvironmentExceptions=taskkill.ехе

При таких параметрах taskkill.ехе будет запускаться в виртуальном контейнере. Исключение подразумевало, что задан параметр ChildProcessEnvironmentDefault=Virtunal в явном или неявном виде и ChildProcessEnvironmentExceptions=taskkill.ехе.
 
Я когда-то пробовал использовать WshShell.Run и по памяти проблема как раз и была с запуском внешних процессов. Хотя, казалось бы, параметр ChildProcessEnvironmentDefault=External должен бы решать эту задачу. Но видно есть какой-то нюанс, но для этого надо предметно экспериментировать.
 
Правильно было бы запускать taskkill.ехе через ExecuteExternalProcess. Это точно сработает. Но я так понимаю, не нравится консольное окно. Можно попробовать запуск через hstart.exe, которая скрывает консольное окно. Под рукой нет, но я когда-то в теме выкладывал.

Всего записей: 3881 | Зарегистр. 20-02-2007 | Отправлено: 11:02 20-02-2015
007Alex007

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

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

Да именно так.
 
Вот как сейчас выглядит скрипт:

Код:
Function OnFirstParentExit
Dim WshShell
Dim arrProcs  
arrProcs = Array("realplay.exe", "rndlresolversvc.exe", "realsched.exe", "RealUpgrade.exe")  
Set WshShell = CreateObject("WScript.Shell")  
For i = 0 To Ubound(arrProcs)  
    intTemp = WshShell.Run("taskkill /f /IM " & arrProcs(i), 0, True)  
    Next  
End Function
 
 
По скрипту (два в одном), о котором я писал ранее - попробовал запустить программу на машине обычного пользователя, скрипт не смог скопировать файл в реальную систему и начал ругаться о правах.  
Вопрос:  как скопировать arrProcs.vbs из папки проекта %Personal% в папку песочницы и там его запустить. Да и стоит ли это делать, насколько я понимаю скрипт будет в изоляции и все реальные процессы опять не удаляться.  
Пробовал прописывать параметр UACRequestedPrivilegesLevel=highestAvailable, не помогло.

Всего записей: 138 | Зарегистр. 18-04-2008 | Отправлено: 16:13 20-02-2015
coherent

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

Цитата:
как скопировать arrProcs.vbs из папки проекта %Personal% в папку песочницы и там его запустить.

А зачем именно в папку песочницы? Вынести рядом с исполняемым ехе-файлом сборки и там запускать. Тем более, что он потом удаляется.

Всего записей: 3881 | Зарегистр. 20-02-2007 | Отправлено: 16:38 20-02-2015 | Исправлено: coherent, 16:41 20-02-2015
007Alex007

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

Цитата:
Вынести рядом с исполняемым ехе-файлом сборки

Прошу прощения, но я не понял о чем речь.  
Если имеется ввиду положить файл в одну из папок проекта %ProgramFilesDir%\Real\RealPlayer\realplay.exe, то там у меня DirectoryIsolationMode=Full, боюсь даже представить, что прога (именно эта прога) наворотит в реальной системе после запуска, если поставить DirectoryIsolationMode=Merged.  
И кроме того, я же написал:

Цитата:
попробовал запустить программу на машине обычного пользователя, скрипт не смог скопировать файл в реальную систему и начал ругаться о правах.  

Поэтому и спрашиваю:

Цитата:
как скопировать arrProcs.vbs из папки проекта %Personal% в папку песочницы и там его запустить

 

Всего записей: 138 | Зарегистр. 18-04-2008 | Отправлено: 17:39 20-02-2015
coherent

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

Цитата:
Прошу прощения, но я не понял о чем речь.

Вынести скрипт в реальную систему, рядом с исполняемым ехе-файлом портативной сборки!
Песочница - дело хитрое. Когда в теме решали "хотелку" выноса файлов в песочницу. Там свои проблемы.
ps. Если полистать тему, то можно найти много готовых решений.

Всего записей: 3881 | Зарегистр. 20-02-2007 | Отправлено: 19:50 20-02-2015
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, может ли сабж решить такую проблему.  
Есть две машины. На одной в Региональных настройках в качестве Language for non-Unicode programs стоит Russian. На другой - German.
 
Можно ли сделать так, чтобы портабельная сборка, собранная на одной из этих машин и затем запущенная на второй, вела себя в соответствии с Language for non-Unicode programs на исходной машине, а не на реальной хостовой?
 
Не знаю, сумел ли внятно объяснить, чего хочу. Если нет, скажите, постараюсь объяснить дополнительно.
 
Спасибо!

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 13:46 27-02-2015
regist123



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
oshizelly
зависит от того, где программа берёт эту информацию. Если просто проверяет ключ в реестре, то можно. А если через WinAPI то нет.

Всего записей: 7189 | Зарегистр. 20-03-2009 | Отправлено: 19:15 01-03-2015
   

Страницы: 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