Может ли Java-программа поместить DLL в C: \ Windows? - PullRequest
0 голосов
/ 16 сентября 2010

Я делаю исполняемый JAR, который использует последовательную библиотеку RxTx. Это требует доступа к rxtxSerial.dll, и я хочу, чтобы JAR поместил его туда автоматически. Таким образом, мне не нужен инсталлятор - просто автономный JAR. Можно ли это сделать?

Когда я вызываю новый FileOutputStream (новый файл ("C: /Windows/rxtxSerial.dll")), я получаю следующее исключение:

java.io.FileNotFoundException: C: \ Windows \ rxtxSerial.dll (доступ запрещен)

Спасибо

Neal

Ответы [ 2 ]

2 голосов
/ 16 сентября 2010

Разрешения не позволят вам писать в системные каталоги в современных версиях Windows. Даже если система позволит вам это сделать, это не будет хорошей практикой.

Упаковав ваше приложение с One-Jar , вы можете связать собственные библиотеки внутри jar, и они будут расширены и добавлены в путь к классам во время выполнения.

Легко интегрировать в сборку Ant или Maven. В качестве бонуса вы также можете включить в jar любые зависимые библиотеки и другие ресурсы, и все они будут расширены до временных файлов во время выполнения.

В ant переупаковка существующего фляги будет выглядеть примерно так:

<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 голос
/ 16 сентября 2010

Да, вы можете поместить файл DLL в системную папку. Однако в последних версиях Windows реализован доступ пользователей / контроль учетных записей , который может помешать вам сделать это, если у вас недостаточно прав. Не имеет значения, какой язык или инструмент вы используете для этого. Чтобы приложение Java могло помещать файлы в C: \ Windows, его следует запускать с правами администратора. Но требование пользователя запускать приложение от имени администратора все время может быть не очень удобным для пользователя. Поэтому я предлагаю проверить, есть ли файл там, если нет, вызвать UAC и скопировать его туда. В этом случае права администратора потребуются только один раз. Вот очень хороший пост в блоге Марка С. Колича о , как вызвать UAC из Java .

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...