我正在尝试在会话 0 中启动 cmd.exe。到目前为止,我已经从提升的命令提示符执行以下操作:
sc config UI0Detect start= auto
net start UI0Detect
响应表明服务已正确启动。此时,我假设如果我切换到会话 0,cmd.exe 将会运行。
我使用以下命令切换到会话 0:
rundll32 winsta.dll,WinStationSwitchToServicesSession
这成功地将我切换到会话 0,但唯一可用的窗口是可以选择返回会话 1 的窗口。
如何让 cmd.exe 在会话 0 中启动?
答案1
要在会话 0 中启动 cmd.exe,请使用 psexec系统内部
psexec.exe -s 0 cmd.exe
现在你有一个在会话 0 中运行的控制台,
您还可以在会话 0 中启动 cmd.exe 并显示 GUI:
psexec.exe -s -i 0 cmd.exe
这样,当您切换到会话 0 时,cmd.exe 将在那里等待您。
您拥有 Windows 7 中所能获得的尽可能多的权利:
whoami /all
如果您使用其他 PsTools,请记住使用 /accepteula 开关:
pslist /accepteula
否则程序会弹出消息框要求接受 Eula,程序会挂起,因为会话 0 中没有 UI 来关闭消息框。
要验证您是否在会话 0 中运行,可以使用 qprocess:
qprocess /ID:0
您将在所有服务进程中看到您的“cmd.exe”。
答案2
它不起作用。它只是以系统身份启动一个进程。
服务是以特殊方式编写的程序,用于接受来自服务控制管理器的命令。
MS 有一个实用程序,允许将程序作为服务运行。它被称为Srvany
Windows 2003 资源工具包工具。
答案3
有一天我偶然发现了解决方案,但是http://www.alex-ionescu.com/?p=59还记录了与我发现的接近的解决方案
使用以下内容创建一个批处理文件(称为 some.bat)
start cmd
然后创建一个服务来调用该批处理文件(使用管理命令提示符)
sc create access0 type= interact type= own binpath= some.bat
(请注意每个 = 后面的空格,我建议对 some.bat 使用完整路径)
然后就是启动服务的问题
sc start ui0detect
sc start access0
(无需使用 sc config UI0Detect start= auto 使 ui0detect 自动启动)
如果一切顺利,您将看到即将出现的消息闪烁框!转到查看消息,您将拥有一个管理员 (nt authority\system) 命令提示符,它不会因服务启动失败而自动销毁(因此需要带有启动命令的批处理文件)
这确实有效,尽管有时第一次尝试并不奏效。
我相信这只允许您访问交互式会话 0,该会话仅对 nt authority\system 用户存在
答案4
您可以使用快捷键 start(Windows)+R 来启动“运行”对话框。从那里,只需输入“cmd”(不带引号)即可。cmd