2008-11-03 17 views
8

Khi tôi cố tạo một tác vụ mới trong trình lên lịch tác vụ qua lớp Java ProcessBuilder, tôi nhận được lỗi truy cập bị từ chối do Windows Vista. Trên XP nó hoạt động tốt.Yêu cầu đặc quyền quản trị cho ứng dụng Java trên Windows Vista

Khi tôi sử dụng "Run as người quản trị" tùy chọn nó chạy trên Vista cũng ..

Tuy nhiên đây là một bước bổ sung requeried một người sử dụng có thể không biết về việc này. Khi người dùng chỉ cần nhấp đúp chuột vào biểu tượng ứng dụng nó sẽ thất bại với truy cập bị từ chối. Câu hỏi của tôi là làm thế nào tôi có thể buộc một ứng dụng java để xây dựng lại đặc quyền quản trị ngay sau khi khởi động?

Trả lời

3

Tôi không chắc chắn bạn có thể làm điều đó theo chương trình. Nếu bạn có một trình cài đặt cho ứng dụng của bạn, bạn có thể thêm các khóa registry để buộc chạy như admin:

Đường dẫn: HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Appcompatflags \ lớp

chính : < < đường dẫn đầy đủ để exe >>

Value: RUNASADMIN

Type: REG_SZ

+11

Tôi không chắc chắn tôi có muốn đặt cờ đó trên 'javaw.exe' không! – finnw

0

Tôi chưa tìm ra giải pháp tốt nhất. Nhưng tôi có một công việc thay thế so với "James Van Huis". Sử dụng RUNASINVOKE thay vào đó để bạn không phải nhìn thấy lời nhắc Cho phép/Từ chối mọi lúc bạn chạy ứng dụng.

Lưu ý: bạn luôn luôn phải được quản lý, đó là những gì tôi đang cố gắng giải quyết

22

Bạn đã xem là gói ứng dụng Java của bạn trong một .exe sử dụng launch4j? Bằng cách này, bạn có thể nhúng tệp kê khai cho phép bạn chỉ định "mức thực thi" cho tệp thực thi của mình. Nói cách khác, bạn kiểm soát các đặc quyền cần được cấp cho ứng dụng đang chạy của bạn, có hiệu quả bảo cho hệ điều hành "Chạy dưới dạng quản trị viên" mà không yêu cầu người dùng phải làm như vậy.

Ví dụ ...

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> 

Xem http://msdn.microsoft.com/en-us/library/bb756929.aspx và phóng Trang web 4j để biết chi tiết về chế độ.

1

Mặc dù câu trả lời của FreeCouch là tốt nhưng tôi gặp phải một số vấn đề và nghĩ đến việc đặt nó ở đây để lần sau người khác có thể được hưởng lợi dễ dàng.

Để nhận được quyền quản trị viên trong Java, theo như tôi thấy giải pháp là quấn * .jar bên trong * .exe với chương trình như Launch4J và gắn kết Tệp kê khai với nó.

Để tạo tệp kê khai, hãy mở bất kỳ trình soạn thảo văn bản nào như Notepad và dán các dòng này vào và lưu nó cùng với tên tệp cùng với phần mở rộng của tệp, ví dụ: 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> 

Trong Launch4J, trên Basic tab thêm tập tin này trong tùy chọn Wrapper Manifest.