【发布时间】:2014-02-27 06:04:00
【问题描述】:
我正在用 C# 创建一个时间管理软件。如何保证前一天没有录入时间记录的人在登录windows时限制访问系统?
例如。屏蔽互联网或屏蔽电脑
【问题讨论】:
标签: c# windows time-management
我正在用 C# 创建一个时间管理软件。如何保证前一天没有录入时间记录的人在登录windows时限制访问系统?
例如。屏蔽互联网或屏蔽电脑
【问题讨论】:
标签: c# windows time-management
有多种方式可以导致功能减少,复杂程度和功能各不相同。
在我看来,最简单的“干净”解决方案是编写一个在本地计算机上运行并充当 HTTP 代理的服务。本地浏览器被配置为使用代理,并且根据您的要求,您返回一个静态页面,说明用户应该输入拳以继续。
用户可以通过重新配置代理设置或使用非系统默认浏览器来绕过代理。大多数 IT 部门都可以通过组策略解决这两个问题。
相关:Open Source Proxy Library for .Net
复杂性: 中度 风险: 中度 Eww 系数: 低度 功效: 中度
与屏幕保护程序大致相同,您可以创建辅助桌面并在隔离的桌面上显示您自己的窗口。收集所需信息后,切换回默认桌面,然后销毁您创建的桌面。
相关:Desktop Switching - CodeProject、Defrag Tools - Desktops
复杂性: 中等 风险: 低 Eww 系数: 低 功效: 高
如果我们要简化实施,也许最简单的做法是简单地将WM_CLOSE 发送到我们不喜欢打开的任何新进程。您可以使用WindowOpenedEvent 来检查新窗口,如果您发现它是一个您不喜欢的进程,请致电Process.CloseMainWindow。
与此同时,用户可以通过快速阅读,或通过打开模式对话框或其他方式防止窗口消息弹出来解决问题。如果您不喜欢的应用程序询问用户是否要关闭,这种方法有点中性。
复杂性: 低 风险: 中等 Eww 因素: 高 功效: 低
如果您为位于HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 的名为Shell 的REG_SZ 指定替代值,则可以使您的程序代替explorer 运行。然后可以检查用户是淘气还是nice,然后有条件地启动explorer。
用户仍然可以通过自己使用任务管理器或其他方式启动explorer 来绕过您的应用程序。
复杂性:低 风险: 高 Eww 系数: 中等 功效: 中等
组策略提供了两种方法来限制在 PC 上运行的软件:Software Restriction Policies and AppLocker。两者都有其优点,并且在他们试图控制的内容上都非常不同。您可以通过检查 admx 文件或使用已建立的 API 以编程方式为使用 HKCU\Software\Policies 密钥创建策略。
组策略仅在刷新发生后才有效,通常是在登录时,因此在清除状态后,您必须注销。
相关:How to modify local group policy setting programatically
复杂性: 中等 风险: 高 Eww 系数: 高 功效: 高
您可以使用自定义登录 UI 来阻止用户在未提交时间时甚至登录。这似乎有点沉重,但是,嘿,那是你的特权。 GINA 在 Vista 中被新架构取代,但有 an excellent sample available on MSDN。您将为此使用非托管代码。
如果用户可以通过其他方式(例如生物识别或智能卡)登录,他们可能看不到您的对话框。
复杂性: 高 风险: 低 Eww 系数: 低 功效: 高
如果您在域中工作,您也可以通过 ADSI 或 LDAP 禁用用户帐户。但是,这样做在合理的时间安排内可能是不可逆的,并且由于与其他系统的集成,在许多安装中是非常不可取的(想到门禁控制器......没有时间卡 = 无法进入建筑物)。
此外,由于较大域中的传播延迟,任何更改都可能需要几分钟或几小时才能影响用户。
复杂性: 低 风险: 高 Eww 系数: 高 功效: 低
【讨论】:
如果您在使用 Active Directory 的域中,您可以锁定他们的帐户,从而使他们无法登录计算机。
【讨论】: