如何在本地系统帐户下运行CMD.exe?
我当前正在运行Vista,我想手动完成与Windows服务相同的操作。由于Windows服务是在本地系统帐户下运行的,因此我想模仿同样的行为。基本上,我想在本地系统帐户下运行CMD.EXE。
我在网上找到了建议使用DOS Task Scheduler AT命令启动CMD.exe的信息,但是我收到了Vista警告,"由于增强了安全性,该任务将在当时运行,但不能交互式运行。"这是一个示例命令:
AT 12:00 /interactive cmd.exe
另一个解决方案建议通过仅启动CMD.exe的服务控件(sc.exe)创建辅助Windows服务。
C:\sc create RunCMDAsLSA binpath= "cmd" type=own type=interact C:\sc start RunCMDAsLSA
在这种情况下,服务无法启动,并导致以下错误消息:
FAILED 1053: The service did not respond to the start or control request in a timely fashion.
第三个建议是通过计划任务启动CMD.exe。尽管我们可以在各种帐户下运行计划的任务,但我不相信本地系统帐户就是其中之一。
我也尝试过使用Runas,但是认为我遇到了与运行计划任务时发现的相同限制。
到目前为止,我的每一次尝试都以失败告终。有什么建议?
解决方案
回答
在这里找到了一个答案,似乎可以通过在binPath参数中添加/ k start来解决问题。这样就可以给我们:
sc create testsvc binpath =" cmd / K start" type =自己的type =交互作用
但是,Ben说这对他不起作用,当我在Windows Server 2008上尝试它时,它确实在本地系统下创建了cmd.exe进程,但是它不是交互式的(我看不到窗口)。
我认为没有简单的方法可以完成要求,但是我想知道我们为什么要这么做?我们是否只是在尝试查看运行服务时发生的情况?似乎我们可以只使用日志记录来确定正在发生的事情,而不必将exe作为本地系统运行...
回答
如果我们可以编写不需要交互的批处理文件,请尝试将该批处理文件作为服务运行,以完成需要做的事情。
回答
我建议我们计算出服务真正需要的最低权限集并使用它,而不是过于特权的本地系统上下文。例如,本地服务。
由于会话0的隔离,交互式服务不再起作用或者至少不会在Windows Vista和Windows Server 2008上显示UI。
回答
尽管我还没有亲自测试过,但我有充分的理由相信上述AT COMMAND解决方案将适用于XP,2000和Server2003. 根据我和科比的测试,我们发现相同的方法不适用于Vista或者Windows Server 2008-最有可能是由于增加了安全性以及不赞成使用/ interactive开关。
但是,我碰到这篇文章,演示了如何使用SysInternals(已于2006年7月被Microsoft收购)中的PSTools。我通过以下命令启动了命令行,然后突然像魔术一样在本地管理员帐户下运行:
psexec -i -s cmd.exe
PSTools运作良好。它是一套轻量级,文档齐全的工具,可以为我的问题提供适当的解决方案。
非常感谢那些提供帮助的人。