我用 C# 编写了一个小应用程序来控制我的孩子在电脑上玩游戏的时间。
现在,我正在寻找当孩子登录到他的个人资料时以管理员身份运行此应用程序的方法。应用程序在屏幕上显示一些警告,并在文件中存储一些统计数据。因此,它不能隐藏/在后台运行(需要在屏幕上显示消息)或以标准用户权限运行(可以删除日志...)
花了几个小时尝试通过 Windows 任务计划程序使其工作,但我无法使该应用程序可见......
任何小费都将非常感谢!
PS 如果无法在其他用户的桌面上运行 GUI 管理应用程序 - 也许有人可以建议我将日志文件存储在何处/如何存储,以便 (聪明的) kido 可以轻松访问它 :)
答案1
正确的做法是让应用作为服务或另一个用户运行,然后将窗口发送到用户(孩子)的桌面。请参阅交互式服务的 MSDN 页面;虽然服务不再被允许真正交互地运行,但它们仍然可以间接地与用户交互,包括在不同帐户下运行的用户。WTSSendMessage
函数可用于在当前登录的会话中显示消息框,或者您的流程可以使用CreateProcessAsUser
(如果它有访问权限)在用户会话中创建一个可以交互的进程(而父进程仍然可以创建用户无法删除的日志文件等)。
编辑:进程不必作为服务运行即可使用这些函数。它们不仅对服务有用,而且对以其他用户身份(非交互方式)运行的任何其他进程也很有用。
编辑 2:至于日志文件,这些文件可以(也应该)为日志记录过程设置仅附加权限。这样,即使程序以孩子的权限运行,它也只能附加到文件(不能删除、覆盖、截断等)。您可以打开仅请求附加访问权限的文件。
当然,这并不能阻止孩子终止这个过程。没有办法阻止那无需以另一个帐户的身份运行它,尽管看门狗进程(可能以另一个用户的身份运行)可以根据需求尝试立即重新启动它。