Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Скрипт автоматически запускающий исталляцию программ (http://forum.oszone.net/showthread.php?t=94298)

skatet 17-11-2007 12:50 680266

Скрипт автоматически запускающий исталляцию программ
 
Всем привет, возникла проблема - как можно сделать чтоб в зависимости от необходимости установки программ, скрипт перенаправлял на установку текущей программы или на запрос установки следующей программы?
вот сам простой скрипт:
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 680337

Мммм... что то не очень понятно, что требуется. Можно на пальцах? По порядку так сказать...

skatet 17-11-2007 15:46 680345

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

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

Ramzes_ 17-11-2007 16:54 680390

Так?

Код:

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 680393

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

поведет скрипт, ведь он должен автоматом перекинуться на установку программы 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 680425

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

skatet 17-11-2007 18:38 680437

в том то и дело, а мне надо чтоб все программы автоматически предлагались к выполнению

Ramzes_ 17-11-2007 19:08 680448

Ну и?

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

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

skatet 17-11-2007 19:16 680451

Вложений: 1
вот алгоритм

skatet 17-11-2007 19:19 680453

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 680502

Код:

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 680654

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

Ramzes_ 18-11-2007 01:57 680671

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

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

Код:

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 680751

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


Время: 00:09.

Время: 00:09.
© OSzone.net 2001-