Выполнение файла сценария из настраиваемого действия установщика Windows - PullRequest
5 голосов
/ 19 сентября 2008

Мне нужно выполнить командный файл как часть процесса деинсталляции в проекте установщика Windows (стандартный установщик OOTB VS 2008 project-vdproj). Невозможно выполнить файл bat напрямую из пользовательских действий в проекте установщика, поэтому я написал быстрый скрипт vbs для вызова требуемого файла bat.
VBS код:

Set WshShell = WScript.CreateObject( "WScript.Shell" )
command = "uninstall-windows-serivce.bat"
msgbox command
WshShell.Run ("cmd /C " & """" & command & """")
Set WshShell = Nothing

Когда этот скрипт выполняется независимо от удаления, он работает отлично. Однако, когда он запускается как часть деинсталляции, он не выполняет файл bat (но отображается окно сообщения, поэтому я знаю, что файл vbs вызывается). Об ошибках не сообщалось (по крайней мере, что я могу сказать). Почему этот сценарий не работает как часть «Удаление пользовательского действия»

Ответы [ 6 ]

6 голосов
/ 24 сентября 2008

Я столкнулся с этой же проблемой, и проблема в том, что вы не можете вызвать WScript внутри файла VBS - вам нужно просто вызвать CreateObject

т.

Set WshShell = CreateObject( "WScript.Shell" )
command = "uninstall-windows-serivce.bat"
msgbox command
WshShell.Run ("cmd /C " & """" & command & """")
Set WshShell = Nothing
1 голос
/ 01 октября 2008

Чем шире вам нужно распространять свое приложение, тем больше я бы рекомендовал против пользовательских сценариев действий. В прошлом я написал несколько статей, но обнаружил, что на слишком многих компьютерах возникают проблемы с VBScript или JavaScript. В итоге я переписал их все на C ++, чтобы справиться с этой ситуацией. Вот пара постов, в которых дается подробное объяснение того, почему вам следует избегать пользовательских действий, написанных по сценарию:

0 голосов
/ 20 сентября 2010

Что мне помогло, так это указать полный путь к файлу .bat.

0 голосов
/ 24 сентября 2008

Сценарии установщика Windows обычно запускаются как системные, если вы не укажете обратное. Возможно ли, что ваш командный файл должен запускаться интерактивным пользователем?

0 голосов
/ 19 сентября 2008

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

0 голосов
/ 19 сентября 2008

В классе вашего установщика вы переопределяете метод удаления:

 Public Overrides Sub Uninstall(ByVal savedState As System.Collections.IDictionary)
            MyBase.Uninstall(savedState)
           'Shell to batch file here
    End Sub

А во-вторых, вы указали полный путь к пакетному файлу?

...