2011-11-24 133 views
3

我做了一個小的Java應用程序,從CD複製目錄到HD。我使用Windows Vista製作了該程序並且它可以工作,但是當我在Windows 7中運行它時,它失敗了。mkdirs不工作在Windows 7

主要問題是需要創建Program Files文件夾內的文件夾。

我用DestinationFolder.mkdirs(),但它沒有創造它

這是java代碼:

public void Install_App() 
{ 
    File srcFolder = new File(System.getProperty("user.dir") + "\\WINDOWS"); 
    File destFolder = new File("C:\\Program Files\\test1\\test2\\"); 
    if (srcFolder.exists()) 
    { 
     try{ 
      if(!destFolder.exists()) 
     { 
      destFolder.mkdirs(); 
     } 
      copyFolder(srcFolder,destFolder,1); 
     }catch(IOException e){ 
      e.printStackTrace(); 
      JOptionPane.showMessageDialog(null, e.toString()); 
      error=true; 
      System.exit(0); 
      } 
    } else 
    { 
     JOptionPane.showMessageDialog(null, "Error. Source Directory doesn't exist."); 
     error=true; 
    }; 
} 

...然後有一個copyfolder功能副本與InputStream中的文件和outputstream。

問題是該文件夾從未創建。我的登錄用戶是管理員。正如我所說,它在Vista中工作。

請問您能幫我嗎?

謝謝。

事情是,我創建了這個應用程序在Java中運行它在Windows和Mac。 在Windows中,它應該自動運行和AUTORUN.INF是這樣的:

[autorun] 
OPEN=java_app.bat 

那麼這種蝙蝠會運行此:

@echo off 
start javaw -jar "java_app.jar" 
EXIT 

所以我怎樣才能修改它爲管理員自動運行呢? 這個Java應用程序的主要思想是簡化安裝&使用外部應用程序的過程,無論您使用哪個操作系統。如果我不得不要求用戶以管理員身份運行它,它將失去意義(使用簡單)。

+2

UAC says no!,see http://stackoverflow.com/questions/2709531/windows-7-create-folder-in-program-files-failing-in-c-sharp-code-even-thought –

回答

1

我猜你是以普通用戶的身份運行你的代碼。

作爲普通用戶在Program Files目錄中寫入默認情況下在Windows 7下被UAC阻止。這就是爲什麼你的Java代碼無法創建目錄。

嘗試從特權shell中運行您的Java代碼。你可以通過Start > [type cmd] > [right-click on 'cmd.exe' and select "Run as administrator"]。現在,從管理員命令提示符處運行編譯代碼java -jarjava -classpath。它現在應該工作。

自動化UAC提示:

您需要作爲[1]和[2]詳細描述,以讓Windows/UAC知道你的程序需要提升權限創建的清單文件。

此外,檢查這個[3]實用程序稱爲elevate將生成您的程序作爲子進程,同時處理所有從父(elevate)程序本身進行的UAC權限請求。

[1] [http://msdn.microsoft.com/en-us/library/aa511445.aspx][2] 
[2] [http://msdn.microsoft.com/en-us/library/bb756929.aspx][3] 
[3] [http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/03/27/elevate-a-process-at-the-command-line-in-vista.aspx][4] 
+0

The事情是,我創建了這個應用程序在Java中運行它在Windows和Mac。在Windows中,它應該自動運行和autorun.inf像這樣: – user897013

+0

感謝您的回答。我在我原來的問題上添加了一些評論,試圖解釋爲什麼我需要這個。 – user897013

+0

@ user897013: 您需要按照[1]和[2]中的詳細說明創建清單文件,以便Windows/UAC知道您的程序需要提升的權限。 [1] http://msdn.microsoft.com/en-us/library/aa511445.aspx [2] http://msdn.microsoft.com/en-us/library/bb756929.aspx – gsbabil

0

這是所有權限問題。我的機器上有同樣的問題。你的java代碼沒有問題。我試圖使用命令行創建文件夾並得到「訪問被拒絕」。

C:\Users\alexr>mkdir "C:\Program Files\mytest" 
Access is denied. 

因此,解決方案是在其他位置創建文件夾還是以管理員身份運行。正如@Alex K. aready所說,參考這篇文章來學習如何獲得這樣的權限。

Windows 7 Create Folder in "Program Files" failing in C# code even thought I have admin rights!

0

您沒有適當的特權Program Files創建目錄。您必須以管理權限啓動應用程序。

要學習的一件重要的事情是,當你正在開發你的應用程序時,你不應該寫它們來保存/修改Program Files中的數據;相反,他們應該寫AppData我們的My Documents

自從Windows Vista以來,修改文件Program Files已被嚴重廢棄,甚至更早。你應該嘗試從一開始就遵循這個規則,或者如果你想要在線發佈它,那就意味着頭痛的重寫你的整個應用程序。

+0

@坦率地感謝您的回答,但應用程序必須安裝在Program Files文件夾內的已知文件夾中。 – user897013