2008-11-03 32 views
8

Java ProcessBuilder sınıfı aracılığıyla görev zamanlayıcıda yeni bir görev oluşturmaya çalıştığımda, Windows Vista'ya erişim reddedildi hatası alıyorum. XP'de gayet iyi çalışıyor. Windows Vista'da Java uygulaması için yönetici ayrıcalıkları isteyin

Ben de Vista üzerinde çalışan "Run olarak yönetici" seçeneğini kullanın

..

Ancak bu ek adım, kullanıcıların bundan haberi olmayabilir requeried olduğunu. Kullanıcı sadece uygulama simgesine çift tıkladığında erişim engellendi. Sorum şu: Bir java uygulamasını, açılıştan hemen sonra yönetici ayrıcalıklarını yeniden test etmek için nasıl zorlayabilirim?

cevap

3

Programlı olarak yapabileceğinizden emin değilim.

Yol:: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ Currentversion \ AppCompatFlags \ katmanları

Anahtar uygulamanız için bir yükleyici varsa, yönetici olarak çalıştırmak zorlamak için kayıt defteri anahtarını ekleyebilirsiniz : < < tam yolu >> exe

Değer: RUNASADMIN

Tür: REG_SZ

+11

Bu bayrağı "javaw.exe" ye ayarlamak istediğimden emin değilim! – finnw

0

Henüz en iyi çözümü bulamadım. Ama "James Van Huis" ile kıyaslandığında alternatif bir işim var. Bunun yerine RUNASINVOKE kullanın, böylece uygulamayı her çalıştırdığınızda İzin Ver/Reddet komutunu görmeniz gerekmez.

Not: Her zaman seni launch4j kullanarak bir .exe Java uygulaması sarma düşündünüz mü

22

çözmeye çalışıyorum neyi olduğunu, Yönetici olmak zorunda? Bunu yaparak, yürütülebilir dosyanız için "yürütme düzeyini" belirtmenize izin veren bir bildirim dosyası gömebilirsiniz. Diğer bir deyişle, çalışan uygulamanız için verilmesi gereken ayrıcalıkları siz denetlersiniz ve etkin bir şekilde işletim sisteminin kullanıcı tarafından manuel olarak yapılmasını gerektirmeden "Yönetici olarak çalıştır" komutunu söylersiniz. Örneğin

...

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 Bkz ve başlatmak Mod ayrıntıları için 4j web sitesi.

1

FreeCouch'un cevabı iyi olmasına rağmen, bir sorunla karşılaştım ve buraya koyma düşüncesine kapıldım, böylece bir dahaki sefere başkalarına kolayca faydalanılabilir.

Java'da Yönetici İzni almak için, çözümün * .jar dosyasının içinde bir * .exe dosyasının Launch4J gibi bir programla ve onunla Manifest'in yapıştırılması olduğunu bulduğum kadarıyla.

Bir Manifest dosyası oluşturmak için Not Defteri gibi herhangi bir metin düzenleyicisini açın ve bu satırları bu alana yapıştırın ve dosya uzantısıyla birlikte e.g: myApplication.exe uzantısına ekleyin.tezahür Sarıcı Manifest seçeneğinde bu dosya eklemek Basic sekmesinde launch4j yılında

<?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> 

.