如果在程序中使用runas命令运行指定程序?

流水之风 2006-06-18 09:11:52
条件:
1.必须在VB程序中用账号2(管理员账号)运行指定程序
2.运行该VB程序时必须使用账号1(公用账号)
3.运行指定程序时不需要输入密码,程序应能自动输入,但是不能显示出来

例如:
账号1的名称为user1,密码无,账号2的名称为user2,密码为1234,自制的VB程序为1.exe,需要运行的程序为2.exe

现在要求的是在使用账号1的情况下运行自制的VB程序1.exe,然后程序1.exe会自动在程序中自动使用账号2来运行指定程序2.exe

备注:
1.操作系统为WINXP
2.runas虽然可以使用指定账号来运行指定程序,但是会提示输入密码,我没办法让程序自动输入密码,如果能够让程序自动输入该密码,并且在程序输入密码时运行程序的人无法看到,那可以说是达到要求了。

这个问题研究了好久,就是没有找到方法,请各位高手高知,谢谢!
...全文
688 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
taifunny 2007-04-19
  • 打赏
  • 举报
回复
http://www.szuon.cn/RunAs%20tool.html
这一款功能挺强
清晨曦月 2006-06-20
  • 打赏
  • 举报
回复
呵呵,太客气了。。。。。。。其实上面说的仅仅是一部分,往往需要本地溢出或写注册表才能提升。我是个业余爱好者,恐怕水平还不及各位呢,只是学的年头很多了,什么也学,什么也知道点。。。QQ倒是有,不经常开。。。47493585
清晨曦月 2006-06-19
  • 打赏
  • 举报
回复
看来我后来的引导是白费精神了。。。继续我的午觉
清晨曦月 2006-06-19
  • 打赏
  • 举报
回复
呵呵,别拿去干坏事啊。。。千万别啊。。。。。

本来WINDOWS问题就多,被发现一个两个也不是意外了,以上你说的,就是那些可以用非管理员身份把自己提升为管理员的所谓“黑软”用的着数了。。。。。。。万万不要拿自己的程序害人啊,聪明的楼主。
流水之风 2006-06-19
  • 打赏
  • 举报
回复
我不是用来弄黑软的,只是因为我这里有一台服务器,我想让其它人只能使用公用帐号,而服务器上面有个监视器的录象软件,该软件必须在管理员帐号下才能使用,所以我才需要这个功能.不管怎么说,起码我现在对黑软还没什么兴趣,呵呵,总之谢谢了.不知道您是否方便留下您的QQ(使用短消息)?我想与您交个朋友.
流水之风 2006-06-18
  • 打赏
  • 举报
回复
太棒了,终于完成了,十分感谢!由于我不需要创建管理员账号(因为原本就有了),所以我删除了创建、删除账号的那部分函数,然后将AnShell函数的账号密码修改了一下就完成了,我想如果需要在公用账号下添加用户,还需要重新修改该程序才行,因为在公用账号下是无法创建新用户的,不过既然可以使用管理员账号运行程序,那要添加账号也是易如反掌的事了,总之十分感谢!
流水之风 2006-06-18
  • 打赏
  • 举报
回复
嗯,我运行了一下,但是发现该程序只能在管理员账号下才能正常,如果是在公用账号下连账号都无法创建,所以程序运行后根本没有出现记事本,或者在这个程序里面在哪里要输入管理员账号和密码吗?我没看懂,还请指教。
清晨曦月 2006-06-18
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4817/4817335.xml?temp=.4379999

HOHO~~~~下一小时玩CS
清晨曦月 2006-06-18
  • 打赏
  • 举报
回复
代码里面一个注释说删除5个用户,不是这样的,我原来的程序是建立了5个,这里只有一个,解释一下这些DOS命令

Shell "cmd.exe /c net user mAdmin mAdmin@ /add", vbHide

Shell "cmd.exe 调用DOS命令
/C 开关,DOS执行完命令后窗口自动消失
net user mAdmin mAdmin@ /add DOS命令,将用户名为mAdmin,密码为mAdmin@的用户添加到本地用户组(为受限用户)
VBHIDE 用使DOS窗口不显示


Shell "cmd.exe /c net localgroup administrators mAdmin /add", vbHide

前面同上
net localgroup administrators mAdmin /add

将用户名为mAdmin的用户添加到administrators组里,这里不区分大小写,其实应该是
Administrators,这一个DOS命令想成功,必须具有管理员权限才行(所以测试想成功必须用管理员身份运行VB6或已经编译好的程序),以前的帖子里面提到的,网上给的NET 命令很多错的,最多的就是Administrators写成Administrator或者参数冗余\错误,垃圾真多,哪个坛子里都这么多


Shell "cmd.exe /c net user mAdmin /del", vbHide

前面同上,
net user mAdmin /del 删除名为mAdmin的帐号,这里也需要管理员权限来运行,而且这个命令不要求你输入mAdmin的密码,所以用这个命令可以删除很多没用的帐号,象GUEST,H什么来着(这些帐号你平时是看不见的,可以用NET USER来显示,用如上命令形式删除他们,我机器上的都被我删了,所以不知道具体是什么名字了)


解释完了,再删我可真脑了,DOS命令我又不是就会这几个,看看我回的那些帖子就知道我学DOS得有好几个小时了,也许下一个小时能学点黑客知识??NET 命令就别算了吧
清晨曦月 2006-06-18
  • 打赏
  • 举报
回复
以前我在 API区回的帖子删贴了???????????????????郁闷,说一声都不,就没了,那里贴的类似如下代码,再删以后再也不答问题了,除了不结帖子的,就是乱删,有什么的,这些抠门,再删,我就开个帖子贴上然后去别的论坛玩也一样
以下代码在VB6SP6,XP下测试通过
测试时运行后点一下窗体,等待任务管理器出现后点“进程”标签查看notepad.exe进程的所有者,结果是所有者ID为mAdim

Option Explicit


Private Const LOGON_WITH_PROFILE = &H1&
Private Const CREATE_DEFAULT_ERROR_MODE = &H4000000
Private Const CREATE_NEW_CONSOLE = &H10&
Private Const CREATE_NEW_PROCESS_GROUP = &H200&

Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type

Private Type STARTUPINFO
cb As Long
lpReserved As Long
lpDesktop As Long
lpTitle As Long
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Byte
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type

Private Declare Function CreateProcessWithLogon Lib "advapi32" Alias "CreateProcessWithLogonW" (ByVal lpUsername As Long, ByVal lpDomain As Long, ByVal lpPassword As Long, ByVal dwLogonFlags As Long, ByVal lpApplicationName As Long, ByVal lpCommandLine As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInfo As PROCESS_INFORMATION) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
'以下函数用制定名和密码调用了应用程序
Private Function AnShell(Username As String, Domain As String, Password As String, ApplicationName As String) As Long
Dim lpUsername As String, lpDomain As String, lpPassword As String, lpApplicationName As String, lpCommandLine As String, lpCurrentDirectory As String
Dim StartInfo As STARTUPINFO, ProcessInfo As PROCESS_INFORMATION
lpUsername = Username
lpDomain = Domain
lpPassword = Password
lpApplicationName = ApplicationName
lpCommandLine = vbNullString
lpCurrentDirectory = vbNullString
StartInfo.cb = LenB(StartInfo)
StartInfo.dwFlags = 0&
CreateProcessWithLogon StrPtr(lpUsername), StrPtr(lpDomain), StrPtr(lpPassword), LOGON_WITH_PROFILE, StrPtr(lpApplicationName), StrPtr(lpCommandLine), CREATE_DEFAULT_ERROR_MODE Or CREATE_NEW_CONSOLE Or CREATE_NEW_PROCESS_GROUP, ByVal 0&, StrPtr(lpCurrentDirectory), StartInfo, ProcessInfo

CloseHandle ProcessInfo.hThread
CloseHandle ProcessInfo.hProcess
AnShell = ProcessInfo.dwProcessId
End Function
Private Sub AddAdmin()
'建立个用户
Shell "cmd.exe /c net user mAdmin mAdmin@ /add", vbHide

'将这个用户权限提升为管理员

Shell "cmd.exe /c net localgroup administrators mAdmin /add", vbHide

End Sub

Private Sub DelAdmin()
'删除建立的5个用户
Shell "cmd.exe /c net user mAdmin /del", vbHide

End Sub

Private Sub Form_Click()
'用刚刚建立的管理员运行一个程序,这里是记事本,参数1为用户名,参数2为域(一般为空就可以了,因为是本机),参数3为要运行的程序路径和名字(这里调用的是WINDOWS下的程序,所以WINDOWS会自己找到的,程序运行时的几个PATH是WINDOWS,SYSTEM,SYSTEM32,APP.PATH,当然可以通过修改WINDOWS的PATH来改变)
AnShell "mAdmin", "", "mAdmin@", "notepad.exe"
'打开任务管理器,以便查看notepad.exe进程的所有者
Shell "taskmgr.exe"
End Sub

Private Sub Form_Load()
'建立一个用户并提升权限为管理员
AddAdmin
End Sub

Private Sub Form_Unload(Cancel As Integer)
'删除调试时建立的管理员
DelAdmin
End Sub



生气,怎么都没个数呢

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧