2010-09-15 27 views
0

我正在製作一個使用RxTx串行庫的可執行JAR。它需要訪問rxtxSerial.dll,我希望JAR能夠自動將它放在那裏。這樣我就不需要安裝程序 - 只需一個獨立的JAR。這可以做到嗎?Java程序可以在C: Windows中放入DLL嗎?

當我調用new FileOutputStream中(新文件( 「C:/Windows/rxtxSerial.dll」)),我得到以下異常:

java.io.FileNotFoundException:C:\ WINDOWS \ rxtxSerial.dll (訪問被拒絕)

感謝,

尼爾

回答

2

權限將阻止您在現代版本的Windows中寫入系統目錄。即使系統讓你這樣做,這也不是好的做法。

通過將您的應用程序打包爲One-Jar,您可以將本機庫綁定到jar中,並且它們將在運行時展開並添加到類路徑中。

很容易集成到Ant或Maven構建中。作爲獎勵,您還可以在jar中包含任何相關的庫和其他資源,並且它們都將在運行時擴展爲臨時文件。

在螞蟻,重新包裝現有的罐子會是這個樣子:

<one-jar destfile="libraryWithNativeCode.jar"> 
    <manifest> 
     <attribute name="One-Jar-Main-Class" value="${main.class}"/> 
    </manifest> 

    <main jar="libraryWithoutNativeCode.jar" /> 

    <binlib> 
     <fileset dir="${bin.dir}" includes="rxtxSerial.dll"/> 
    </binlib> 
</one-jar> 
1

是的,你可以把系統文件夾一個DLL文件。但是,最新版本的Windows實施User Access/Account Control,如果您沒有足夠的特權,可能會阻止您這樣做。用什麼語言或工具來處理這個問題並不重要。爲了使Java應用程序能夠將文件放入C:\ Windows,它應該以管理員身份運行。但是要求用戶一直以管理員身份運行應用程序對用戶來說可能不是很方便。所以我建議做的是檢查文件是否已經存在,如果沒有,觸發UAC並將其複製到那裏。在這種情況下,管理員權限只需要一次。這是Mark S. Kolich在how to trigger UAC from Java上撰寫的一篇很好的博客文章。

希望它有幫助。

相關問題