我们如何在 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/