Перезагрузите как последний шаг в vdproj, как я могу добавить его?

Как добавить действие перезагрузки в vdproj?

Мне нужен файл MSI, который перезагрузит компьютер в конце установки.

3 ответа

Вот мое решение, основанное на saschabeaumont.

Чтобы автоматически изменить MSI-файл для запроса перезагрузки каждый раз, когда я создаю установщик:

  1. Создайте файл с именем "AddRebootPrompt.vbs" в папке, где находится файл проекта развертывания.vdproj, со сценарием VB, перечисленным ниже.

  2. Найдите проект развертывания в обозревателе решений Visual Studio, щелкните правой кнопкой мыши и выберите "Свойства".

  3. В свойстве PostBuildEvent вставьте следующее, чтобы запустить скрипт после сборки проекта установщика:

cscript "$(ProjectDir)AddRebootPrompt.vbs" "$(BuiltOuputPath)"

Содержание AddRebootPrompt.vbs:

Dim installer, database, view, result
Dim strPathMsi 

If WScript.Arguments.Count <> 1 Then
    WScript.Echo "Usage: cscript AddRebootPrompt.vbs <path to MSI>"
    WScript.Quit -1
End If

strPathMsi = WScript.Arguments(0)

Set installer = CreateObject("WindowsInstaller.Installer")
Set database = installer.OpenDatabase (strPathMsi, 1)
Set view = database.OpenView ("INSERT INTO Property (Property, Value) VALUES ('REBOOT', 'Force')")

WScript.Echo "Adding forced reboot prompt to install sequence."

view.Execute
database.Commit
WScript.Quit 0

В случае успеха вы увидите "Добавление запроса принудительной перезагрузки для установки последовательности". в окне журнала Build Output при сборке проекта установщика.

Просто добавьте свойство "REBOOT" со значением "Force", которое предложит пользователю перезагрузиться после завершения установки, или автоматически перезагрузится, если пользовательский интерфейс отсутствует.

Если вы не можете сделать это в vdjproj, просто используйте Orca, чтобы отредактировать таблицу свойств MSI после сборки установки.

Если вы хотите принудительно перезагрузить компьютер, вы можете установить REBOOT=Force и REBOOTPROMPT=Suppress, чтобы пользователь не получал приглашения.

В качестве альтернативы вы можете использовать ForceReboot действие для перезагрузки во время установки или ScheduleReboot запланировать перезагрузку после завершения установки. Опять же, любое из этих действий может быть добавлено с помощью Orca, если вы не можете сделать это в vdjproj.

Вы можете сделать что-то подобное, используя следующую VBS

Dim installer, database, view, result
Set installer = CreateObject("WindowsInstaller.Installer")
Set database = installer.OpenDatabase ("setup.msi", 1)
Set view = database.OpenView ("INSERT INTO Property (Property, Value) VALUES ('REBOOT', 'Force')")
view.Execute
database.Commit
Set database = nothing

Если вам нужно перезагрузить компьютер, установщик Windows должен обнаружить его автоматически. Если вы хотите перезагрузиться, так как вам лень запускать службы вручную, вам нужно будет найти другой способ (я не знаю ни одного легкого способа).

Другие вопросы по тегам