|

补发帖子
另:由于精易的服务器IO Error,无法上传图片,用了luogu的图床(I‘m OIer.)
----------------------------我是可爱的分割线----------------------------
我们知道,在windows里有一个名为at的命令(不知道就看下面),用于在一个指定的时间运行指定的命令行,类似linux的job。
不知道?没关系,先开个cmd,输入help,然后看见了吧!
https://cdn.luogu.org/upload/pic/51186.png
这个命令的说明如下:(at /?可见)
AT 命令安排在特定日期和时间运行命令和程序。
要使用 AT 命令,计划服务必须已在运行中。
AT [\\computername] [ [id] [/DELETE] | /DELETE [/YES]]
AT [\\computername] time [/INTERACTIVE]
[ /EVERY:date[,...] | /NEXT:date[,...]] "command"
\\computername 指定远程计算机。 如果省略这个参数,
会计划在本地计算机上运行命令。
id 指定给已计划命令的识别号。
/delete 删除某个已计划的命令。如果省略 id,
计算机上所有已计划的命令都会被删除。
/yes 不需要进一步确认时,跟删除所有作业
的命令一起使用。
time 指定运行命令的时间。
/interactive 允许作业在运行时,与当时登录的用户
桌面进行交互。
/every:date[,...] 每个月或每个星期在指定的日期运行命
令。如果省略日期,则默认为在每月的
本日运行。
/next:date[,...] 指定在下一个指定日期(如,下周四)运
行命令。如果省略日期,则默认为在每
月的本日运行。
"command" 准备运行的 Windows NT 命令或批处理
程序。
这是at命令的说明。请注意,at需要在计划服务运行的时候才能用。(不过,杀毒软件一直没有关过这个服务)
注意说明中蓝色字体的部分。这很关键,如果你想要运行个能看见窗口的东西,就一定要加上这个参数。
我们都需要窗口,于是就加上这个。
运行命令行:(假定你现在是10:00,这个时间就设置为当前时间的下一分钟)
at 10:01 /interactive cmd
有一些电脑可以使用下一秒,如:
at 10:01:01 /interactive cmd
总之,你要定一个不久之后的时间。
然后,就静静等待好戏开始。
一会儿之后,弹出一个cmd窗口。
https://cdn.luogu.org/upload/pic/51187.png
看上去,这个窗口没什么特别的。
但是,如果你是经验丰富的cmder的话,注意那个窗口的标题,对比一下正常的cmd标题:
https://cdn.luogu.org/upload/pic/51188.png
发现了什么了吧!新的这个cmd是以svchost运行的。如果你熟悉windows的任务管理器的话,svchost是服务!!!
这就是说,cmd是以服务运行的!!!这意味着它有system权限了!!!
[url= ] [/url]
确实有system权限了,现在,这个cmd有了很大的危险性。你可以用它把WINDOWS删了,所以请谨慎操作!
我们很快写出如下程序用于启动system权限的程序:
.版本 2
.子程序 以system权限运行命令
.参数 命令, 文本型
.局部变量 time, 日期时间型
time = 取现行时间 ()
运行 (“at ” + 到文本 (取小时 (time)) + “:” + 到文本 (取分钟 (time) + 1) + “ /interactive ” + 命令, 真, #隐藏窗口)
然后,直接调用(我没考虑到时分的进位问题,各位自己写吧)
这样,你在XP及以下的系统就可以有system权限啦!
为什么要重点提是XP?因为在Vista以上的系统,at不允许以interactive参数启动程序。
=========================================================================
我要UI!不过,当然有办法了!
先写一个能够接受两种参数的的程序:例如
.版本 2
.局部变量 cmd, 文本型, , "0"
.局部变量 i, 整数型
.局部变量 b, 逻辑型
取命令行 (cmd)
.计次循环首 (取数组成员数 (cmd), i)
.如果真 (cmd = “background”) ' 后台
b = 真
_启动窗口.可视 = 假
' 提供需要system权限的功能
.如果真结束
.计次循环尾 ()
.如果真 (b = 假)
' 提供UI
system权限运行(取执行文件名 ()+" /background")
.如果真结束
大概意思是:你把一个程序分为两个部分:一个是接受UI命令,以system权限执行,然后给UI输出结果。
另一个是UI,发出命令,接受结果显示。
两部分可以用同步对象或管道等通讯。
用户点开exe,没带任何参数,启动UI
然后UI再用at命令启动后台。
这样就解决了那个没UI的问题!
|
评分
-
查看全部评分
|