2008-11-03 114 views
8

当我尝试创建通过Java的ProcessBuilder类,我得到拒绝访问错误的Windows Vista中的任务调度新任务。在XP上它工作得很好。请求管理员权限的Java应用程序在Windows Vista上

当我使用它在Vista上运行,以及“运行作为管理员联系”选项..

然而,这是一个额外的步骤重新查询的用户可能不知道这一点。当用户只需双击应用程序图标时,它将失败并且访问被拒绝。我的问题是如何强制Java应用程序在启动后立即获得管理权限?

回答

3

我不确定你可以通过编程来完成。如果您对您的应用程序的安装程序,您可以添加注册表项,以强制以管理员身份运行:

路径: HKEY_CURRENT_USER \ SOFTWARE \微软\的Windows NT \ CURRENTVERSION \ Appcompatflags \层

关键:< <完整路径的EXE >>

值:RUNASADMIN

类型:REG_SZ

+11

我不知道我会想设置旗`javaw.exe`! – finnw 2010-02-13 11:15:41

0

我还没有找到最好的解决方案。但我有一个替代的解决办法,比较“詹姆斯范惠斯”。使用RUNASINVOKE来代替,所以每次运行应用程序时都不必看到提示Allow/Deny。

注意:你总是必须要管理,那什么,我试图解决

22

你有没有考虑使用launch4j一个.exe包装Java应用程序?通过这样做,您可以嵌入一个清单文件,允许您为可执行文件指定“执行级别”。换句话说,您可以控制应该授予正在运行的应用程序的权限,从而有效地告诉操作系统“以管理员身份运行”,而不需要用户手动执行此操作。

例如...

的build.xml:

<target name="wrapMyApp" depends="myapp.jar"> 
     <launch4j configFile="myappConfig.xml" /> 
</target> 

myappConfig.xml:

<launch4jConfig> 
    <dontWrapJar>false</dontWrapJar> 
    <headerType>gui</headerType> 
    <jar>bin\myapp.jar</jar> 
    <outfile>bin\myapp.exe</outfile> 
    <priority>normal</priority> 
    <downloadUrl>http://java.com/download</downloadUrl> 
    <customProcName>true</customProcName> 
    <stayAlive>false</stayAlive> 
    <manifest>myapp.manifest</manifest> 
    <jre> 
    <path></path> 
    <minVersion>1.5.0</minVersion> 
    <maxVersion></maxVersion> 
    <jdkPreference>preferJre</jdkPreference> 
    </jre> 
</launch4jConfig> 

myapp.manifest:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <security> 
      <requestedPrivileges> 
      <requestedExecutionLevel level="highestAvailable" 
       uiAccess="False" /> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 

http://msdn.microsoft.com/en-us/library/bb756929.aspx和发射4j网站获取模式细节。

1

虽然FreeCouch的回答是不错,但我面临着把它在这里等下次别人的一些问题和思想可以很容易地受益。

要获得管理员权限在Java中,只要我找到了解决办法是包装与像Launch4J方案,并结合清单与它的* .exe内的* .jar。

要创建清单文件,请打开任何文本编辑器(如记事本),然后将这些行粘贴到文件中,并将文件名与其扩展名一起保存,例如:myApplication.exe。清单

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <security> 
      <requestedPrivileges> 
       <requestedExecutionLevel level="highestAvailable" uiAccess="False" /> 
      </requestedPrivileges> 
     </security> 
    </trustInfo> 
</assembly> 

在Launch4J,Basic选项卡上的包装清单选项添加此文件。

相关问题