Запуск VBS в настройке MSI - PullRequest
       45

Запуск VBS в настройке MSI

1 голос
/ 13 декабря 2011

Я пытаюсь создать настройку для приложения, которое я разрабатываю, используя установку Visual Studio 2010.Одна из вещей, которые мне нужно сделать, это запустить некоторые exe-программы.Я использую обычное действие для запуска VBS.Этот метод, который я использую для выполнения:

Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute """c:\prog.exe""","-parm bla" ,"","","" 

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

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "c:\prog.exe -parm bla",1,True

Но похоже, что при запуске MSI сценарий не имеет объекта WScript.Итак, мой вопрос: могу ли я как-нибудь получить доступ к объекту WScript от MSI или есть какой-нибудь лучший способ сделать это?

Ответы [ 3 ]

3 голосов
/ 13 декабря 2011

Действительно, установщик Windows не поддерживает объекты WScript напрямую. Вы пытались использовать функцию «CreateObject» напрямую?

Set objShell = CreateObject("WScript.Shell")

2 голосов
/ 14 декабря 2011

Да, вы не можете использовать объект WScript в скриптах, которые вызываются MSI. В качестве обходного пути вы можете создать новое пользовательское действие с Action = NewAction, type = 38, Source = (blank) TArget = добавить файл сценария vb как TARGET, выполнив следующие команды CScript WiTextIn.vbs mymsi.msi CustomAction NewAction Цель YourVBscript.vbs.

Файл WiTextIn находится в C: \ Program Files \ Microsoft SDKs \ Windows \ v7.0 \ Samples \ sysmgmt \ msi \ scripts

(PS: при попытке запустить VBScript может произойти сбой, так как vbscripts отключен, и вам, возможно, придется удалить ключ из реестра и включить vbscript)

0 голосов
/ 02 февраля 2012

Это то, что я сделал в своем скрипте VBS, чтобы открыть исключение брандмауэра для службы. Я не мог использовать стандартное интерактивное всплывающее окно для службы (которая запрашивает разрешение на открытие брандмауэра), поскольку у него нет пользовательского интерфейса.

set oShell  = CreateObject("WScript.shell")
oShell.run "cmd /C netsh advfirewall firewall add rule program=""C:\Program Files (x86)\foo\bar\prog.exe"" name=""my-service"" dir=in action=allow"  

Я добавил этот скрипт vbs в пользовательскую операцию «Зафиксировать» проекта установки и развертывания, оставив свойства по умолчанию.

Для устранения проблем на этапе vbs я запустил msi из DOS, используя

msiexec /i mysetup.msi /L* install.log

Обратите внимание, что я изначально использовал "Wscript.CreateObject", но это не удалось. Это сработало.

...