【问题标题】:C# form app system accountC#表单应用系统账号
【发布时间】:2009-02-11 13:33:44
【问题描述】:

是否可以在系统帐户下运行 Windows 窗体应用程序或控制台应用程序?像 asp.net 应用程序可以通过更改机器配置文件在系统帐户下运行:

<processModel  userName="machine" password="AutoGenerate" /> 

这是为了给程序更多的权限...

【问题讨论】:

    标签: c# winforms system account


    【解决方案1】:

    听起来你是在攻击症状而不是问题。您的程序究竟需要做什么需要额外的权限?也许有一种不同的方式来完成这项任务而无需任何提升。

    【讨论】:

    • 嗯,登录帐户非常受限...应用程序需要访问事件日志和文件系统...没有其他帐户...
    • Windows 服务至少暂时没有问题 1. 因为缺乏交互(尽管用户交互非常少,) 2. 由于应用程序已经开发,没有时间进行更改...
    • 两者...在系统驱动器和登录帐户无权访问系统驱动器...和事件日志有进一步的限制..程序读/写/创建自定义日志太...客户端应该为程序提供单独的登录名,但由于未知原因而更改了,大声笑...
    【解决方案2】:

    是的。您可以在系统帐户下运行任何应用程序。一种技术是将其作为计划任务启动,或者使用“at”命令行实用程序启动。

    不幸的是,从 Windows Vista 开始,以这种方式运行的应用程序无法与用户交互,因为它们在不同的会话中运行。

    这意味着以这种方式运行 WinForms(或任何类型的 GUI)应用程序是毫无意义的。如果您想查看输出,对于控制台应用程序也是如此。

    如果是一次性的,您可能可以忍受它。否则,您应该考虑创建一个 Windows 服务,该服务可以配置为在任何用户帐户(包括 SYSTEM)下运行。如果您想与它交互,您需要实现一个单独的应用程序,通过(例如).NET 远程处理与它通信。

    【讨论】:

    • 好吧,我对计划任务不太熟悉..这里它要求输入用户名和密码...我已经研究过 Windows 服务...本来可以解决...但是应用程序是表单基于(要求是这样的)...
    【解决方案3】:

    您不能通过从 Windows 中的计划任务启动它来做到这一点吗?

    【讨论】:

    • 又来了?你的意思是说,如果我将我的程序置于计划任务下(在用户登录时),它将在系统登录下运行并以管理员身份获得所有访问权限?
    • 可以,可以选择定时任务的执行账号。
    【解决方案4】:

    这取决于你的目标是什么。如果您希望它在系统帐户下运行并让用户与之交互,则不能这样做。如果您绝对需要这样做,最好创建一个服务来处理需要额外权限并作为系统运行的操作,并从作为用户运行的 GUI 连接到该服务。但是,如果您走这条路,请意识到您在标准用户可以做的事情和系统可以做的事情之间的安全边界上创建了一个漏洞,因此请确保您保护 GUI 和服务之间的连接并限制只为您绝对需要它做的事情提供服务。

    正如 lassevk 所提到的,如果您只需要执行一次或偶尔执行此操作,您可以使用 runas 在另一个安全上下文中运行,但仍具有交互式 GUI/控制台。

    另一方面,如果您只是希望它在某个时间无人看管地运行,您应该能够像 Martin 建议的那样使用任务调度程序。

    【讨论】:

    • 感谢您的所有快速响应...我得出了与制作 Windows 服务类似的结论...由于时间限制,我正在寻找“出路”...大多数的东西工作得很好..除了那些需要管理员权限的东西......
    猜你喜欢
    • 2017-04-26
    • 2013-04-29
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多