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

我们正在为我们的设置使用VS 2005的设置项目,我们需要通过编程决定提示重新启动(因此,每次安装都不会发生,只是在某些安装上)。

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

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

更新:我们尝试设置:

savedState["REBOOT"] = "Force";

从我们的自定义操作的安装()方法中,但没有运气。似乎没有统治,Savedstate确实做了任何事情。

也尝试了:

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

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

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

更新:我们尝试挂接到appdomain.processexit和appdomain.domainunload并启动新线程和调用process.getCurrentProcess()。WaitForeForexit(),这些事件都不会在C#自定义操作中发射...

有帮助吗?

解决方案 2

看来,我们解决此问题的唯一方法是:

a)使用orca修改MSI,以使每个安装重新启动设置

b)用WIX重做设置项目或安装盾牌

感谢您的帮助。

其他提示

您需要添加或调用MSI自定义操作计划启动 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 在自定义动作中。请注意,安排的自定义操作必须是立即的自定义操作,而不是延期的自定义操作。这意味着您可能需要在安装后安排它。您也可以将其添加到Installexecutesequence中,并具有您的自定义操作设置的公共财产条件。

当我在使用User32.dll的Win32 API函数之前必须这样做时,我认为这就是这样: exitwindowsex()

Lancesc给了您答案。您需要运行Schedulereboot,最好的方法是将其插入由您在自定义操作中设置的自定义属性条件的Installexecutesequence中。

正如您提到的,Wix是未来灵活性的方法。 Wix现在还包括DTF(部署工具基础),这是包裹整个Windows API的丰富的.NET类库。您可以使用它来轻松从C#访问MSI数据库或编写C#自定义操作。如果需要,我可以提供有关此信息的更多信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top