mkdirs не работает в windows 7 - PullRequest
3 голосов
/ 24 ноября 2011

Я сделал небольшое java-приложение, которое копирует каталог с CD на HD. Я сделал программу, используя Windows Vista, и она работала, но когда я запустил ее в 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, которая копирует файлы с inputtream и outputtream.

Проблема в том, что папка никогда не создается. Мой логин является администратором. И, как я уже сказал, это работало в Vista.

Не могли бы вы мне помочь, пожалуйста?

Спасибо.

Дело в том, что я создал это приложение в Java, чтобы запустить его в Windows и Mac. В Windows он должен быть запущен с autorun.inf следующим образом:

[autorun]
OPEN=java_app.bat

тогда эта летучая мышь будет работать так:

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

так как я могу изменить его для автоматического запуска от имени администратора? Основная идея этого java-приложения - упростить процесс установки и использования внешнего приложения независимо от того, какую ОС вы используете. Если мне придется попросить пользователя запустить его от имени администратора, он потеряет смысл (прост в использовании).

Ответы [ 3 ]

1 голос
/ 24 ноября 2011

Я предполагаю, что вы выполняете свой код от имени обычного пользователя.

Запись в каталог Program Files от имени обычного пользователя по умолчанию блокируется UAC под Windows 7. Вот почемувашему Java-коду не удается создать каталоги.

Попробуйте запустить свой Java-код из привилегированной оболочки.Вы можете иметь один Start > [type cmd] > [right-click on 'cmd.exe' and select "Run as administrator"].Теперь запустите скомпилированный код с помощью java -jar или java -classpath из командной строки администратора.Теперь он должен работать.

Автоматизация запроса UAC:

Вам необходимо создать файл манифеста, как подробно описано в [ 1 ] и[ 2 ], чтобы сообщить Windows / UAC, что вашей программе потребуются повышенные привилегии.

Также проверьте эту утилиту [ 3 ] с именем elevate, которая будет порождать вашу программу как дочерний процесс при обработке запросов на разрешение UAC, которые все исходят от самой родительской (elevate) программы.,

[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 голосов
/ 24 ноября 2011

У вас нет необходимых прав для создания каталогов в Program Files. Вы должны запустить приложение с правами администратора.

Важно понять, что при разработке ваших приложений вы никогда не должны писать их для сохранения / изменения данных внутри Program Files; вместо этого они должны либо написать AppData нашему My Documents.

Изменение файлов в Program Files серьезно устарело со времен Windows Vista и даже раньше. Вы должны попытаться следовать этому правилу с самого начала, или это означает, что вам придется переписывать все ваше приложение, если вы когда-нибудь захотите опубликовать его в Интернете.

0 голосов
/ 24 ноября 2011

Это все проблемы с разрешениями. У меня такая же проблема на моей машине. Нет ничего плохого в вашем коде Java. Я попытался создать папку с помощью командной строки и получил «Отказано в доступе».

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

Итак, решение заключается в том, создавать ли папку в другом месте или запускать от имени администратора. Как сказал @Alex K. aready, обратитесь к этому сообщению, чтобы узнать, как получить такие разрешения.

Создание папки Windows 7 в «Программных файлах» завершилось ошибкой в ​​коде C #, даже если у меня есть права администратора!

...