Перезагрузите как последний шаг в vdproj, как я могу добавить его?
Как добавить действие перезагрузки в vdproj?
Мне нужен файл MSI, который перезагрузит компьютер в конце установки.
3 ответа
Вот мое решение, основанное на saschabeaumont.
Чтобы автоматически изменить MSI-файл для запроса перезагрузки каждый раз, когда я создаю установщик:
Создайте файл с именем "AddRebootPrompt.vbs" в папке, где находится файл проекта развертывания.vdproj, со сценарием VB, перечисленным ниже.
Найдите проект развертывания в обозревателе решений Visual Studio, щелкните правой кнопкой мыши и выберите "Свойства".
В свойстве 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 должен обнаружить его автоматически. Если вы хотите перезагрузиться, так как вам лень запускать службы вручную, вам нужно будет найти другой способ (я не знаю ни одного легкого способа).