这里的目标是开始一个简单的.NET应用程序,它在login时捕获一些环境variables(时间,用户名,计算机名等)。 此.NET应用程序订阅Windows“用户注销”事件。
启动时,应用程序捕获上述variables,并在注销(我正在捕获)时在我的数据库中创build一个logging,我更新同一logging中的另一个字段与注销时间。
上面的工作正如我所愿,当我启动二进制文件时,它会初始化日志条目,然后等待注销事件并更新相同的logging。
限制,.NET二进制文件应该能够位于共享点(\ server \ share \ myapp \ v1)上,这样我就可以将应用程序更新到(\ server \ share \ myapp \ v2),并简单地更新GPO / Logon脚本。
我最初的想法是使用\ domaincontroller \ sysvol \目录来存储二进制文件,然后更新所有用户帐户,以包含对我的应用程序的调用。 你能看到这种方法的缺陷吗?
我的问题是这样的:首先,我的想法有什么问题吗? 其次,如果是这样,通过组策略或其他方式,确保在服务器上启动会话时启动此应用程序的最佳方式是什么?
每次启动会话时启动,使用基于组策略的login脚本将执行此操作。 我们发现的一个警告是,如果对于适用的任何计算机对象GPO启用了“回送处理”,那么在User GPO中指定的这样的脚本似乎执行TWICE。 我们不得不修改我们的login脚本来处理这种情况。
我不熟悉.NET事件订阅,所以我不知道这是否意味着应用程序文件保持打开整个会话。 如果是这样的话,那么由于开放式locking问题,更新应用程序将非常困难。 如果有50个工作站login,那么应用程序将会有50个拒绝写入锁,这使得更新应用程序变得更困难。 这是将应用程序保留在sysvol上的一个实例(实际上在GPO本身中)可以提供帮助,因为它更好地处理了这种情况。
但是,这只是意味着它重新注销注销保持共享应该没问题。
从sysvol运行它没有任何错误。
创build一个gpologin脚本将默认做到这一点,并确保它运行。 通常,terminal服务器有多个gpo,其中一个会运行login脚本并指定组策略的环回处理模式。