2013-08-22 45 views
0

我已經寫了一個程序在C#中更改文件和文件夾屬性在Windows中。 我從Java運行這個程序,開始從窗戶全部 的偉大工程的程序,在java中只是文件是可以改變的,當我嘗試更改文件夾 它拋出:Java與用戶特權執行.exe

 
Problem signature: 
    Problem Event Name: CLR20r3 
    Problem Signature 01: fileattr.exe 
    Problem Signature 02: 1.0.0.0 
    Problem Signature 03: 5203a06f 
    Problem Signature 04: mscorlib 
    Problem Signature 05: 4.0.30319.18052 
    Problem Signature 06: 5173c144 
    Problem Signature 07: 43cf 
    Problem Signature 08: 13c 
    Problem Signature 09: System.UnauthorizedAccess 
    OS Version: 6.1.7601.2.1.0.256.48 

我設置的ProcessBuilder目錄到user.home認爲這個問題可能會因爲這個問題而變成 ,但不起作用。 我的代碼:

 
try { 

       ProcessBuilder pb = new ProcessBuilder("fileattr", "+t",     "\"".concat(path).concat("\"")); 
       pb.environment().put("fileattr", pathToApp); 
       pb.directory(new File(System.getenv("WINDIR") + "\\system32")); 
       Process p = pb.start(); 
       p.waitFor(); 
       p.destroy(); 
      } catch (Throwable t) { 
       t.printStackTrace(); 
      } 
+0

您是否嘗試過以管理員身份啓動JVM? –

+0

對不起我的無知,但我該怎麼做?添加清單應該工作? 進程是在用戶上下文中還是在jvm上下文中啓動的? –

回答

0

我根據this線程想,你有兩種可能性:

  • 您可以add a manifest您fileattr.exe
  • 您可以使用elevate.exe,使用運行二進制文件: ProcessBuilder pb = new ProcessBuilder("elevate", "fileattr");

我希望我回答你的問題。

0

第一種可能性都沒有解決,我已經建立與UAC級別的兩個選項清單文件中的filleattr:

highestAvailable|requireAdministrator 

這裏的清單:

<security> 
    <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 
    </requestedPrivileges> 
</security> 

二有一個問題,我包括兩個.exe文件在Java jar中,當程序啓動時提取 .exe文件並嘗試執行它們,問題,提取過程正在修改可執行文件中的某些東西,當我嘗試運行o riginal文件都可以完美運行,否則它拋出的:

This version of C:\Users\Luis\SyncData\Elevate.exe is not compatible with th e version of Windows you're running. Check your computer's system information to see whether you need a x86 (32-bit) or x64 (64-bit) version of the program, and then contact the software publisher.

也許@Templar sugestion應該工作,我只需要JVM授予用戶權限的那是足以改變文件夾atributtes,我想試試。

重要的是,從30秒到30秒,一個線程調用這個方法很多次,所以權限需要是永久的,否則它將無法正常工作。