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

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

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

Ответы [ 3 ]

3 голосов
/ 05 декабря 2008

Просто добавьте свойство «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
3 голосов
/ 12 июля 2011

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

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

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

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

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

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

AddRebootPrompt.vbs content:

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 при сборке проекта установщика.

0 голосов
/ 04 декабря 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...