1

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

谢谢。

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

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

4

1 回答 1

0

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

我们能问一下您要部署到什么环境吗?关于您的要求和需要这个的理由的更多细节?


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

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

下面是一些链接。明天我得再看看。这有点乱:

  1. 本机 Win32:我认为NetWkstaUserEnum可以工作,但看起来LsaEnumerateLogonSessions函数更好,如CodeProject - Enumerating Logon Sessions中所述(有古老的源代码可供下载)。

  2. 终端服务器:终端服务器上似乎还有一个查询工具 serverfault)(我从未尝试过)。

  3. SysInternals:系统内部提供免费工具PsLoggedOn,但在输出格式方面似乎并不理想。虽然可能。

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

  5. .NET Framework Cassia,一个开源包装器调用 Win32

总有github.com可以搜索。


于 2018-04-09T03:22:06.500 回答