c# - 在 C# 中从 Msi 中的自定义操作强制重启

标签 c# visual-studio windows-installer custom-action

我们如何在 C# 自定义操作中提示安装后重启计算机?

我们正在使用 VS 2005 的安装项目进行安装,我们需要以编程方式决定提示重新启动(因此它不会在每次安装时发生,只是在某些安装时发生)。

更新:我们正在寻找已经内置在 MSI 自定义操作系统中的东西。如果不存在,我们可以通过某种方式自行重启 PC,但我们希望避免这种情况。

更新:我们看到您在 Orca 中编辑 Msi 时可以在哪里设置 REBOOT=Force,您可以在运行时从 C# 自定义操作修改这些表吗?我们可以将其设置为每次都重新启动,但这可能会使我们的设置变得烦人(它只需要在极少数情况下重新启动)。

更新:我们尝试设置:

savedState["REBOOT"] = "Force";

从我们自定义操作的 Install() 方法中,但运气不好。看起来不像 IDictionary,savedState 真的什么都做。

还试过:

Context.Parameters["REBOOT"] = "Force";

但我认为这个集合只是传递给自定义操作的命令行参数。

更新:有没有办法用 Orca 编辑我们的 MSI 来使这个技巧起作用?也许在某些文件存在的情况下安排重启?我们尚未找到如何从 C# 自定义操作设置 MSI 属性。

更新:我们尝试挂接到 AppDomain.ProcessExit 和 AppDomain.DomainUnload 并启动一个新线程并调用 Process.GetCurrentProcess().WaitForExit() 并且这些事件都不会从 C# 自定义操作中触发...

最佳答案

您需要添加或调用 MSI 自定义操作 ScheduleReboot http://msdn.microsoft.com/en-us/library/aa371527(VS.85).aspx在您的 InstallExecuteSequence 中,.您可以使用 MSI 函数 MsiDoAction 执行此操作,http://msdn.microsoft.com/en-us/library/aa370090(VS.85).aspx在自定义操作中。请注意,安排此操作的自定义操作必须是立即自定义操作,而不是延迟自定义操作。这意味着您可能需要在 InstallFinalize 之后安排它。您还可以将其添加到 InstallExecuteSequence 中,并在您的自定义操作设置的公共(public)属性上设置条件。

关于c# - 在 C# 中从 Msi 中的自定义操作强制重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1178327/

相关文章:

c# - 在 MSI 安装程序中使用 C# 创建自定义对话框

c# - 我怎样才能将参数传递给这个方法

c# - 如何在 C# 中从多个 exe 创建安装程序?

asp.net - VS2017 无法加载文件或程序集 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 或其依赖项之一

java - 如何改进Intellij 8?

c++ - WPF 可以与 C++ 一起使用吗?

c# - 缺少 System.Windows.Controls.DataVisualization.Charting 程序集引用

c# - C#WinForm多次单击事件处理程序,用于类似功能

windows-installer - MSI 绝望。 MSI 将不会注册 DLL

visual-studio-2008 - WiX 生成的 MSI 未压缩