作为vdproj的最后一步重新启动,我该如何添加它?

时间:2008-12-04 10:28:15

标签: windows-installer vdproj

如何将重启动作添加到vdproj?

我需要一个MSI文件,在安装结束时重启PC。

3 个答案:

答案 0 :(得分:3)

只需添加“REBOOT”属性,其值为“Force”,这将提示用户在安装完成后重新启动,或者在没有用户界面时自动重启。

如果你不能在vdjproj中执行此操作,那么只需在构建设置后使用Orca编辑MSI的Property表。

如果要强制重启,可以设置REBOOT = Force和REBOOTPROMPT = Suppress,以便不提示用户。

或者,您可以使用ForceReboot操作在安装过程中重新启动,或ScheduleReboot在安装完成后安排重新启动。如果你不能在vdjproj中这样做,可以使用Orca再添加这些操作中的任何一个。

您可以使用以下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

答案 1 :(得分:3)

以下是我的解决方案,基于saschabeaumontanswer

每次构建安装程序时,要自动修改.msi以提示重新启动:

  1. 在.vdproj部署项目文件所在的文件夹中创建名为“AddRebootPrompt.vbs”的文件,下面列出了VB脚本。

  2. 在Visual Studio解决方案资源管理器中找到部署项目,右键单击并转到“属性”。

  3. 在PostBuildEvent属性中,在构建安装程序项目后粘贴以下内容以运行脚本:

  4. 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日志窗口中。

答案 2 :(得分:0)

如果需要重新启动,Windows Installer应自动检测它。如果你想重新启动,因为你懒得手动启动服务,你需要找到一些其他方式(我不知道任何简单的方法)。