在 vdproj 中最后一步重新启动,我该如何添加它?

发布于 2024-07-09 22:54:36 字数 155 浏览 10 评论 0原文

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

我需要一个 MSI 文件,该文件可在安装结束时重新启动电脑。

How can I add the reboot action to a vdproj?

I need an MSI file which restart the PC at the end of the installation.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

别闹i 2024-07-16 22:54:36

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

如果您无法在 vdjproj 中执行此操作,则只需在构建设置后使用 Orca 编辑 MSI 的属性表即可。

如果要强制重新启动,可以设置 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

Just add the "REBOOT" property with the value "Force" which will prompt the user to reboot once setup is complete, or automatically reboot if there is no user interface.

If you cannot do this in the vdjproj then just use Orca to edit the Property table of the MSI once the setup is built.

If you want to force a reboot, you can set REBOOT=Force and REBOOTPROMPT=Suppress so that the user is not prompted.

Alternatively you can use the ForceReboot action to reboot during the middle of installation or ScheduleReboot to schedule a reboot once the installation is complete. Again either of these actions can be added using Orca if you cannot do so in the vdjproj.

You can do something like this using the following 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
小伙你站住 2024-07-16 22:54:36

这是我基于 saschabeaumont答案

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

  1. 在 .vdproj 部署项目文件所在的文件夹中创建一个名为“AddRebootPrompt.vbs”的文件,其中包含下面列出的 VB 脚本。< /p>

  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

如果成功,您将看到“添加强制重新启动提示以安装序列”。 构建安装程序项目时,在构建输出日志窗口中。

Here is my solution based on saschabeaumont's answer.

To automatically modify the .msi to prompt for restart every time I build an installer:

  1. Create a file named "AddRebootPrompt.vbs" in the folder where the .vdproj deployment project file is located, with the VB script listed below.

  2. Locate the deployment project in the Visual Studio solution explorer, right-click and go 'Properties'.

  3. In the PostBuildEvent property, paste the following to run the script after building the installer project:

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

If successful, you will see "Adding forced reboot prompt to install sequence." in your Build Output log window when building the installer project.

染柒℉ 2024-07-16 22:54:36

如果您需要重新启动,Windows Installer 应该会自动检测到它。 如果您想重新启动,因为您懒得手动启动服务,则需要找到其他方法(我不知道有什么简单的方法)。

If you need to reboot, Windows Installer should detect it automatically. If you want to reboot as you are too lazy to start services manually, you will need to find some other way (I do not know of any easy way).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文