如何在打开多个会话时在wix中安排ScheduleReboot

时间:2018-04-07 13:28:16

标签: wix windows-installer windows-users

我正在寻找一种方法,只有在有多个用户登录到目标计算机的情况下才能在WIX安装程序中使用提示ScheduleReboot操作。到目前为止,我找不到条件或其他内置方式来做到这一点,我决定在写这个自定义动作之前问这里。

感谢。

回答@Stein Asmul qustions:
该应用程序是一个开发工具,可以部署在任何类型的机器上,任何类型的Windows都比Windows XP更新。我需要重新启动多个已打开会话的情况,因为该应用程序涉及在安装期间启动并在Windows启动时启动的多个用户拥有的进程。当这些进程对一个用户关闭而另一个用户关闭时,可能会导致应用程序无效状态,或者至少导致我们不打算支持的状态。由于我没有简单的方法为登录用户启动这些进程,而不是运行安装的用户,因此请求重新启动对我来说是可接受的解决方案。

我编写winform的代码没有问题,该代码使用WMI查询检查登录用户的数量,并根据重新启动的响应提供,即使使用别人已编写和测试过的代码总是很好。我想我可以编写一个Wix CustomAction来保存一个属性,指示是否存在多个交互式登录,然后将其用作ScheduleReboot的条件,但是像Wix中的很多东西一样,它会很复杂,很难调试和最终结果几乎相似。当然,我会更喜欢从某个地方获得经过测试的“Wix”方式来做到这一点,因为简单的winform限制了我对Wix可以做的选择,但是我没有找到任何东西而且它不是我要去的东西现在进入

1 个答案:

答案 0 :(得分:0)

有趣的问题。由于没有其他人回答:我不知道此的任何内置功能。我快速浏览了 WiX ,我不记得曾经在商业工具中看到了对此的支持。这很奇怪,因为部署到终端服务器似乎需要这样的东西?

我们可以问一下您要部署的环境吗?有关您的要求的更多细节以及需要这些的理由?

如果您已经知道如何在代码中执行此操作,并且只是想检查是否有更简单的方法,或者您是否需要代码解决方案,那么您的问题并不是很清楚?

我总是喜欢本地代码进行部署。您的设置应该可以处理任何状态下的任何机器,任何操作系统版本中的任何语言以及任何操作系统版本。最小的依赖。

以下是一些链接。我明天必须再看一眼。这有点乱:

  1. 原生Win32 :我认为NetWkstaUserEnum可行,但看起来LsaEnumerateLogonSessions功能更好,如{ {3}}(有古老的源代码可供下载)。

  2. 终端服务器 :终端服务器上似乎还有CodeProject - Enumerating Logon Sessionsquery tool)(我从未尝试过) )。

  3. SysInternals :系统内部提供免费工具serverfault,但就输出格式而言,它似乎并不理想。虽然可能。

  4. PowerShell / WMI :有PsLoggedOn。我真的不喜欢PowerShell进行部署,但很多人似乎都在使用它们。我想这是未来。在使用WMI时,结果似乎与不同的操作系统版本不一致。

  5. .NET Framework some PowerShell scripts out thereCassia, an open source wrapper

  6. 总是会PInvoke Win32进行搜索。