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