如何在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#自定义动作中触发......
答案 0 :(得分:3)
您需要在InstallExecuteSequence中添加或调用MSI自定义操作ScheduleReboot http://msdn.microsoft.com/en-us/library/aa371527(VS.85).aspx。您可以通过在自定义操作中使用MSI函数MsiDoAction http://msdn.microsoft.com/en-us/library/aa370090(VS.85).aspx来执行此操作。请注意,安排此操作的自定义操作必须是立即自定义操作,而不是延迟自定义操作。这意味着您可能需要在InstallFinalize之后安排它。您还可以使用自定义操作设置的公共属性上的条件将其添加到InstallExecuteSequence。
答案 1 :(得分:1)
看起来,我们解决这个问题的唯一方法是:
A)使用orca修改MSI以使每次安装重新启动安装程序
B)使用WiX或Install Shield
重做安装项目感谢帮助人员。
答案 2 :(得分:0)
当我在使用user32.dll的Win32 API函数之前必须这样做时,我认为就是这样:ExitWindowsEx()
答案 3 :(得分:0)
LanceSc给了你答案。您需要运行ScheduleReboot,最好的方法是将它插入InstallExecuteSequence,该自定义属性由您在自定义操作中设置的自定义属性调整。
正如您所提到的,Wix是未来灵活性的方式。 Wix现在还包括DTF(部署工具基础),它是一组丰富的.NET类库,用于包装整个Windows API。您可以使用它从C#轻松访问MSI数据库或编写C#自定义操作。如果需要,我可以提供更多相关信息。