2008-11-03 14 views
8

Podczas próby utworzenia nowego zadania w harmonogramie zadań za pośrednictwem klasy Java ProcessBuilder pojawia się błąd odmowy dostępu dla systemu Windows Vista. Na XP działa dobrze.Żądanie uprawnień administratora dla aplikacji Java w systemie Windows Vista

Kiedy należy wybrać opcję „Uruchom jako, administratora” to działa na Vista, jak również ..

Jednak jest to dodatkowy krok requeried an użytkownicy mogą nie wiedzieć o tym. Gdy użytkownik kliknie dwukrotnie ikonę aplikacji, nie uda się z odmową dostępu. Moje pytanie brzmi: jak mogę wymusić aplikację java, aby ponownie uzyskać uprawnienia administratora zaraz po starcie?

Odpowiedz

3

Nie jestem pewien, czy możesz to zrobić programowo. Jeśli masz instalator aplikacji, można dodać klucz rejestru, w celu wymuszenia Uruchom jako admin:

Ścieżka: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Appcompatflags \ warstw

Key : < < Pełna ścieżka do exe >>

Wartość: RUNASADMIN

Typ: REG_SZ

+11

Nie jestem pewien, czy chciałbym ustawić tę flagę na 'javaw.exe'! – finnw

0

Nie znalazłem jeszcze najlepszego rozwiązania. Ale mam alternatywną pracę w porównaniu do "James Van Huis". Zamiast tego należy użyć polecenia RUNASINVOKE, aby nie wyświetlać pytania Zezwalaj/Odmów za każdym razem, gdy uruchomisz aplikację.

Uwaga: zawsze trzeba być administratorem, że to, co usiłuję rozwiązać

22

Czy za zawijania aplikacji Java w .exe używając launch4j? W ten sposób można osadzić plik manifestu, który pozwala określić "poziom wykonania" dla pliku wykonywalnego. Innymi słowy, kontrolujesz przywileje, które powinny być nadane twojej uruchomionej aplikacji, skutecznie mówiąc systemowi operacyjnemu "Uruchom jako administrator" bez konieczności ręcznego robienia tego.

Na przykład ...

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> 

Zobacz http://msdn.microsoft.com/en-us/library/bb756929.aspx a uruchomić Witryna 4j zawierająca szczegóły dotyczące trybu.

1

Chociaż odpowiedź FreeCouch jest dobra, ale napotkałem pewien problem i pomyślałem o umieszczeniu go tutaj, aby następnym razem łatwiej było korzystać z innych.

Aby uzyskać uprawnienia administratora w Javie, o ile znalazłem rozwiązaniem jest zawarcie pliku * .jar wewnątrz pliku * .exe programem takim jak Launch4J i wiążącym z nim Manifestem.

Aby utworzyć plik manifestu, otwórz dowolny edytor tekstów, taki jak Notatnik, i wklej w nim te linie, a następnie zapisz go z nazwą pliku wraz z rozszerzeniem np. myApplication.exe.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> 

W launch4j, na karcie Basic dodać ten plik w opcji Wrapper oczywisty.

Powiązane problemy