条件:1、WINXP以USERS用户登陆,但USERS用户组权限是只读。
      2、用VB写一个程序在USERS用户登陆后运行。但程序有Administrators组的完全控制权限
              (以上所说的权限都是指磁盘文件和文件夹的访问控制权限)
求助:能用VB写出这样的程序吗?如何实现请贴上代码。。最好有注释
      谢谢了            或是有别的方法用VB实现在只读权限用户登陆时程序能有文件的完全控制权限

解决方案 »

  1.   

    有管理员密码吗???有就试试runas
      

  2.   

    能写出
    问题是你要知道admin的账户密码
      

  3.   

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

  4.   

    aspower你是不是有收集代码的癖好啊
      

  5.   

    自己写个代码管理软件啊
    又不是很难
    把vbp做个列表就可以了
      

  6.   

    谢谢。但是请问有没有程序运行目录的设置。我现在调用的某个程序执行时需要设置当前运行目录必须为程序所在目录(这里的程序是指被调用的程序,但是又不可能在每个要调用的程序目录中都建立一个调用程序。)
    如:ShellExecute(Me.hwnd, "Open", 执行文件完整路径, "", 指定运行目录, 1)可以正常执行某程序。
    但使用
    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, ProcessInfoCloseHandle ProcessInfo.hThread
    CloseHandle ProcessInfo.hProcess
    AnShell = ProcessInfo.dwProcessId
    End FunctionAnShell "mAdmin", "", "mAdmin@", "执行文件完整路径" 
    则被执行的程序得不到它所在目录的信息,程序无法正常运行。
    请问API函数CreateProcessWithLogon的参数中有没有像
    ShellExecute(Me.hwnd, "Open", 执行文件完整路径, "", 指定运行目录, 1)
    中一样能**指定运行目录**吗?
      

  7.   

    请问
    lpCommandLine = vbNullString
    lpCurrentDirectory = vbNullString
    这两个参数分别是什么用的?能说明一下吗?
      

  8.   

    从字面上理解,lpCommandLine应该是运行这个exe带的参数,lpCurrentDirectory是当前目录