PDA

Показать полную графическую версию : Скрипт автоматически запускающий исталляцию программ


skatet
17-11-2007, 12:50
Всем привет, возникла проблема - как можно сделать чтоб в зависимости от необходимости установки программ, скрипт перенаправлял на установку текущей программы или на запрос установки следующей программы?
вот сам простой скрипт:
Set WshShell = CreateObject("WScript.Shell")
RetCode = WshShell.Run("""C:\Program Files\CCleaner\CCleaner.exe""", 1, vbTrue)
RetCode = WshShell.Run("notepad", 1, vbTrue)
RetCode = WshShell.Run("notepad", 1, vbTrue)
Будьте так добры, помогите :)

Ramzes_
17-11-2007, 15:34
Мммм... что то не очень понятно, что требуется. Можно на пальцах? По порядку так сказать...

skatet
17-11-2007, 15:46
:) конечно!
1. необходимо установить 3 программы к примеру.
Что должен делать скрипт - спрашивает в самом начале - нужно ли устанавливать Пр№1, тут - если я говорю - да, то скрипт устанавливает ее, после завершения, предлагает уст. пр №2, если я скажу нет, то сразу переходит на прогамму №2 не устанавливая 1ю и т.д. - программ много - автоматизация установок ПО
:) надеюсь на понимание!

И спасибо за внимание. Очень нужно просто - это все у меня есть, но на батниках и без возм выбора, а желательно.

Ramzes_
17-11-2007, 16:54
Так?

If (MsgBox("Установить программу XXX?", vbYesNo) = vbOK) Then
RetCode = WshShell.Run("XXX", 1, vbTrue)
End If


If (MsgBox("Установить программу YYY?", vbYesNo) = vbOK) Then
RetCode = WshShell.Run("YYY", 1, vbTrue)
End If

skatet
17-11-2007, 17:01
ну как бы да, надеюсь я правильно понял - а если я нажму нет, то тогда как повед скрипт?

поведет скрипт, ведь он должен автоматом перекинуться на установку программы yyy

тоесть как я понимаю речь идет о команде Else

' Объявляем переменные
Dim WshShell,theNotepad,Res,Text,Title
' Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")

Text="Запуск установки программного обеспечения" & vbCrLf & "Установка Хранителя Паролей "
Title="Установка"
' Выводим диалоговое окно на экран
Res=WshShell.Popup(Text,0,Title,vbOkCancel)
' Определяем, какая из кнопок была нажата в диалоговом окне
If (Res=vbOk) Then
Set theNotepad = WshShell.Exec("C:\Program Files\KeePass-1.08\KeePass.exe")
Else
... вот тут надо чтоб снова вышло окно запроса
и вновь выбрать да или нет, но уже для следующей программы

а потом в конце эта процедура
WScript.Sleep 100

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

Ramzes_
17-11-2007, 18:16
Если ты нажмешь Отмена, программа перейдет к выполнению следующего оператора.
В примере, который указал ты, если ты нажмешь Да, и установится первая программа, то после этого запроса на установку второй программмы не будет.

skatet
17-11-2007, 18:38
в том то и дело, а мне надо чтоб все программы автоматически предлагались к выполнению

Ramzes_
17-11-2007, 19:08
Ну и?

If () Then
............
End If

И так по порядку для каждой программы.
А еще лучше функцию напиши. Будет грамотнее.

skatet
17-11-2007, 19:16
вот алгоритм

skatet
17-11-2007, 19:19
Option Explicit
Dim WshShell,theNotepad,Res,Text,Title,RetCode
Set WshShell = WScript.CreateObject("WScript.Shell")

Text="Хранитель паролей"
Title="Установка"
Res=WshShell.Popup(Text,0,Title,vbOkCancel)

If (Res=vbOk) Then
RetCode = WshShell.Run("""C:\Program Files\KeePass-1.08\KeePass.exe""", 1, vbTrue)

Else

Text="RegShot"
Title="Установка"
Res=WshShell.Popup(Text,0,Title,vbOkCancel)

RetCode = WshShell.Run("""C:\Program Files\regshot181_src_bin\regshot.exe""", 1, vbTrue)

WScript.Sleep 100
End If

но как сделать чтоб если я выбираю Yes, то после установки, автоматом выходило окно с вопросом и т.д.

..с вопросом на установку след программы

Ramzes_
17-11-2007, 20:28
Option Explicit
Dim WshShell,theNotepad,Res,Text,Title,RetCode
Set WshShell = WScript.CreateObject("WScript.Shell")

Text="Хранитель паролей"
Title="Установка"
Res=WshShell.Popup(Text,0,Title,vbOkCancel)

If (Res=vbOk) Then
RetCode = WshShell.Run("""C:\Program Files\KeePass-1.08\KeePass.exe""", 1, vbTrue)
End If

Text="RegShot"
Title="Установка"
Res=WshShell.Popup(Text,0,Title,vbOkCancel)

If (Res=vbOk) Then
RetCode = WshShell.Run("""C:\Program Files\regshot181_src_bin\regshot.exe""", 1, vbTrue)
End If

WScript.Sleep 100


Но я бы сделал так:

'------------------------
Option Explicit
'------------------------

Dim setup_dic
Set setup_dic = CreateObject("Scripting.Dictionary")

Call setup_dic.Add("Хранитель паролей", """C:\Program Files\KeePass-1.08\KeePass.exe""")
Call setup_dic.Add("RegShot", """C:\Program Files\regshot181_src_bin\regshot.exe""")

Dim prog, progs
progs = setup_dic.Keys

For Each prog In progs
Call setup_prog(prog, setup_dic(prog))
Next

'------------------------
dim g_WshShell

Function setup_prog(prog_name, prog_path)
If IsEmpty(g_WshShell) Then
Set g_WshShell = WScript.CreateObject("WScript.Shell")
End If

If (g_WshShell.Popup(prog_name,0,"Установка",vbOkCancel) = vbOk) Then
Call g_WshShell.Run(prog_path, 1, vbTrue)
End If
End Function

Таким образом усилия по добавлению новых программ сводятся к минимуму.

skatet
18-11-2007, 00:53
:) вообще спасибо! Но есть пару моментов - когда я нажмаю ок при первой программе, то после запука, недожидаясь завершения первой запускается 2ая.
2ое - не мог бы ты разъяснить чуток что описывается в скрипте?
Буду очень благодарен.

Ramzes_
18-11-2007, 01:57
Только что попробовал. Программы нормально запускаются по порядку, проверь скрипт.

По поводу скрипта.

Dim setup_dic
Set setup_dic = CreateObject("Scripting.Dictionary")

Call setup_dic.Add("Хранитель паролей", """C:\Program Files\KeePass-1.08\KeePass.exe""")
Call setup_dic.Add("RegShot", """C:\Program Files\regshot181_src_bin\regshot.exe""")

Scripting.Dictionary – объект, позволяющий хранить коллекцию данных в виде ключ-значение. Ключ должен быть уникальным. В качестве ключа здесь выступает название программы, в качестве значения – путь к ней. Сначала мы заполняем словарь известными программами.

Dim prog, progs
progs = setup_dic.Keys

Получаем массив, содержащий все значения ключей.

For Each prog In progs
Call setup_prog(prog, setup_dic(prog))
Next

Теперь перебираем все значения ключей (имя программы), и для каждого значения вызываем функцию запуска, в которую передаем название программы, и путь ее запуска (значение словаря, соответствующее имени программы – setup_dic(prog))

skatet
18-11-2007, 10:45
:) отличный скрипт, так на самом деле станет еще проще перебирать все программы с помощью словаря!
Респект! Я еще с ним повожусь, потом поделюсь впечатлениеми подробнее.
Спасибо.




© OSzone.net 2001-2012