Private Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As LongPrivate Const SE_PRIVILEGE_ENABLED = &H2
Private Const EWX_REBOOT = 4
Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_QUERY = &H8Private Type LUID
UsedPart As Long
IgnoredForNowHigh32BitPart As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End TypePrivate Sub AdjustToken()
Dim hdlProcessHandle As Long
Dim hdlTokenHandle As Long
Dim tmpLuid As LUID
Dim tkp As TOKEN_PRIVILEGES
Dim tkpNewButIgnored As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long
hdlProcessHandle = GetCurrentProcess()
OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hdlTokenHandle
LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
tkp.PrivilegeCount = 1
tkp.TheLuid = tmpLuid
tkp.Attributes = SE_PRIVILEGE_ENABLED
AdjustTokenPrivileges hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded
End SubPublic Function Rcboot(ByVal Status As Integer)
On Error Resume Next
AdjustToken
ExitWindowsEx (EWX_REBOOT), &HFFFF
End Function编译成组件后用ASP调用为什么没作用?有执行的权限

解决方案 »

  1.   

    那是因为运行iis的帐户没有关机的权限
      

  2.   

    有权限,我设置了管理员帐号,而且我用ADSI给目录权限也成功,说明不是权限问题
      

  3.   

    一觉醒来,再看你的帖子,发现一切都只是因为你写错了参数......
    EWX_REBOOT=2不是=4
    EWX_FORCE才是=4所以应该是
    ExitWindowsEx 2, 0
      

  4.   

    它在EXE里运行时能正常关机吗?先在EXE里调通了再说吧.
      

  5.   

    能,不但EXE能,在我本地也能,可一上服务器就不行,不知道什么原因
      

  6.   

    ....那么服务器与你机器一定有不同的地方啊.权限值得怀疑呀.你写个脚本放服务器上,再在浏览器里调用一下,看看能不能用它关机.另外,会不会是ASP方面的权限问题?你的用户也许有权限,但ASP脚本本身有这个权限吗?