以管理员身份执行Java程序

以管理员身份执行Java程序,java,batch-file,vbscript,cmd,Java,Batch File,Vbscript,Cmd,我正试图以管理员的身份执行一个Java文件,这个文件需要一个终端,因此比在管理员的命令中简单地运行Jar要困难一些 我有一个Java加载程序,它将类文件执行到Java程序。我试图以管理员身份运行加载程序,它给我一个“找不到或加载主类”错误。因此,我找到了一个VBS脚本,它将以管理员身份执行批处理,但这仍然不起作用。不过,我要澄清的是,当我以非管理员身份运行加载程序时,它工作得非常好。如何执行需要终端的java程序,以便拥有管理员权限。这是一个runas程序。无参数运行以获取帮助 Set UAC

我正试图以管理员的身份执行一个Java文件,这个文件需要一个终端,因此比在管理员的命令中简单地运行Jar要困难一些


我有一个Java加载程序,它将类文件执行到Java程序。我试图以管理员身份运行加载程序,它给我一个“找不到或加载主类”错误。因此,我找到了一个VBS脚本,它将以管理员身份执行批处理,但这仍然不起作用。不过,我要澄清的是,当我以非管理员身份运行加载程序时,它工作得非常好。如何执行需要终端的java程序,以便拥有管理员权限。

这是一个runas程序。无参数运行以获取帮助

Set UAC = CreateObject("Shell.Application")  
UAC.ShellExecute "C:\Users\Biebs\Desktop\New folder\Loader.bat", "ELEV", "", "runas", 1
HelpMsg=vbcrlf&“ShVerb”&vbcrlf&vbcrlf&“David Candy 2014”&vbcrlf&vbcrlf&“列出或运行文件或文件夹上的浏览器谓词(右键单击菜单)”&vbcrlf&vbcrlf&“ShVerb[动词]”&vbcrlf&vbcrlf&“不带动词使用它列出文件或文件夹可用的谓词”&vbcrlf&vbcrlf&vbcrlf
HelpMsg=HelpMsg&“程序列出了大多数动词,但只有在菜单的第一个分隔符“&vbcrlf&”上方的动词以这种方式使用时才起作用”&vbcrlf&vbcrlf
HelpMsg=HelpMsg&“可以使用属性动词。但是,程序必须保持运行”&vbcrlf&“以保持属性对话框打开。它通过显示“&vbcrlf&”消息框来保持运行。”
设置objShell=CreateObject(“Shell.Application”)
Set Ag=WScript.Arguments
设置WshShell=WScript.CreateObject(“WScript.Shell”)
设置fso=CreateObject(“Scripting.FileSystemObject”)
如果Ag.count=0,则
wscript.echo“ShVerb-未指定文件”
wscript.echo HelpMsg
wscript.quit
ElseIf Ag.count=1,则
如果LCase(替换(Ag(0),“-”,“/”)=“/h”或替换(Ag(0),“-”,“/”=”?),则
wscript.echo HelpMsg
wscript.quit
如果结束
ElseIf Ag.count>2则
wscript.echo vbcrlf&“ShVerb-To many parameters”&vbcrlf&“在文件名和包含空格的谓词周围使用引号”&vbcrlf
wscript.echo HelpMsg
wscript.quit
如果结束
如果fso.DriveExists(Ag(0))=True,则
设置objFolder=objShell.Namespace(fso.GetFileName(Ag(0)))
'Set objFolderItem=objFolder.ParseName(fso.GetFileName(Ag(0)))
设置objFolderItem=objFolder.self
msgbox ag(0)
ElseIf fso.FolderExists(Ag(0))=True然后
设置objFolder=objShell.Namespace(fso.GetParentFolderName(Ag(0)))
设置objFolderItem=objFolder.ParseName(fso.GetFileName(Ag(0)))
ElseIf fso.fileExists(Ag(0))=True然后
设置objFolder=objShell.Namespace(fso.GetParentFolderName(Ag(0)))
设置objFolderItem=objFolder.ParseName(fso.GetFileName(Ag(0)))
其他的
wscript.echo“ShVerb-”&Ag(0)和“未找到”
wscript.echo HelpMsg
wscript.quit
如果结束
Set objVerbs=objFolderItem.Verbs
'如果只有一个参数列出该项的动词
如果Ag.count=1,则
对于objFolderItem.Verbs中的每个cmd
如果len(cmd)0,则CmdList=CmdList&vbcrlf&replace(cmd.name,&,“”)
下一个
wscript.echo mid(CmdList,2)
'如果两个参数不支持该项的动词
ElseIf Ag.count=2那么
对于objFolderItem.Verbs中的每个cmd
如果lcase(替换(cmd,&,“”)=lcase(Ag(1)),则
wscript.echo Cmd.doit
退出
如果结束
下一个
“财产是特殊情况。脚本必须保持运行,才能显示“属性”对话框。
如果Lcase(Ag(1))=属性,则
WSHShell.AppActivate(ObjFolderItem.Name和“属性”)
msgbox“此消息框必须保持打开状态才能使“&ObjFolderItem.Name&”属性对话框保持打开状态。”
如果结束
如果结束
帮助解决了我的问题。只需确保将Elevate.exe添加到源代码的文件夹中(其中包含.class和.java文件),然后可以使用此代码执行所有管理员命令

HelpMsg = vbcrlf & "  ShVerb" & vbcrlf & vbcrlf & "  David Candy 2014" & vbcrlf & vbcrlf & "  Lists or runs an explorer verb (right click menu) on a file or folder" & vbcrlf  & vbcrlf & "    ShVerb <filename> [verb]" & vbcrlf & vbcrlf & "  Used without a verb it lists the verbs available for the file or folder" & vbcrlf & vbcrlf
HelpMsg = HelpMsg & "  The program lists most verbs but only ones above the first separator" & vbcrlf & "  of the menu work when used this way" & vbcrlf & vbcrlf
HelpMsg = HelpMsg & "  The Properties verb can be used. However the program has to keep running" & vbcrlf & "  to hold the properties dialog open. It keeps running by displaying" & vbcrlf & "  a message box."

Set objShell = CreateObject("Shell.Application")
Set Ag = WScript.Arguments 
set WshShell = WScript.CreateObject("WScript.Shell") 
Set fso = CreateObject("Scripting.FileSystemObject")

    If Ag.count = 0 then 
        wscript.echo "  ShVerb - No file specified"
        wscript.echo HelpMsg 
        wscript.quit
    ElseIf Ag.count = 1 then 
        If LCase(Replace(Ag(0),"-", "/")) = "/h" or Replace(Ag(0),"-", "/") = "/?" then 
            wscript.echo HelpMsg 
            wscript.quit
        End If
    ElseIf Ag.count > 2 then 
        wscript.echo vbcrlf & "  ShVerb - To many parameters" & vbcrlf & "  Use quotes around filenames and verbs containing spaces"  & vbcrlf
        wscript.echo HelpMsg 
        wscript.quit
    End If

    If fso.DriveExists(Ag(0)) = True then
        Set objFolder = objShell.Namespace(fso.GetFileName(Ag(0)))
'       Set objFolderItem = objFolder.ParseName(fso.GetFileName(Ag(0)))
        Set objFolderItem = objFolder.self
        msgbox ag(0)
    ElseIf fso.FolderExists(Ag(0)) = True then
        Set objFolder = objShell.Namespace(fso.GetParentFolderName(Ag(0)))
        Set objFolderItem = objFolder.ParseName(fso.GetFileName(Ag(0)))
    ElseIf fso.fileExists(Ag(0)) = True then
        Set objFolder = objShell.Namespace(fso.GetParentFolderName(Ag(0)))
        Set objFolderItem = objFolder.ParseName(fso.GetFileName(Ag(0)))
    Else
        wscript.echo "  ShVerb - " & Ag(0) & " not found"
        wscript.echo HelpMsg 
        wscript.quit
    End If

    Set objVerbs = objFolderItem.Verbs

    'If only one argument list verbs for that item

    If Ag.count = 1 then
        For Each cmd in objFolderItem.Verbs
            If len(cmd) <> 0 then CmdList = CmdList & vbcrlf & replace(cmd.name, "&", "") 
        Next
        wscript.echo mid(CmdList, 2)

    'If two arguments do verbs for that item

    ElseIf Ag.count = 2 then
        For Each cmd in objFolderItem.Verbs
            If lcase(replace(cmd, "&", "")) = LCase(Ag(1)) then 
                wscript.echo Cmd.doit 
                Exit For
            End If
        Next
    'Properties is special cased. Script has to stay running for Properties dialog to show.
        If Lcase(Ag(1)) = "properties" then
            WSHShell.AppActivate(ObjFolderItem.Name & " Properties")
            msgbox "This message box has to stay open to keep the " & ObjFolderItem.Name & " Properties dialog open."
        End If  
    End If
感谢用户mathd发布的


可在以下位置找到提升程序。感谢所有提供帮助的人:)

没有使用PsExec尝试过任何Java类,看看这个,它可能会对您有所帮助。@patrick是否只在未指定用户时授予管理员权限?@impinball我相信是的(仅当当前用户在该计算机上的Administrators组或Administrators组中时)。您尚未指定路径参数。
Runtime.getRuntime().exec("Elevate.exe yourcommand");