2

Итак, я понимаю, что файлы не могут быть созданы или удалены без прав администратора на диске C:\. У меня такой вопрос: если каталог на диске C:\ введен ... скажем, Program Files, то нельзя ли там писать файлы?

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

Я получаю, что диск C:\ требует разрешений, но как только моя программа обнаруживает, что Program Files является «непустым» каталогом, она входит в Program Files, но ей по-прежнему отказывают в разрешениях на запись. Я знаю это, потому что я удостоверился, что программа перечисляет каждый каталог, который она находит в данном пути Итак, КАЖДАЯ папка, присутствующая на диске C:\, печатается. Папки не удалены, хотя.

Принимая во внимание, что когда я устанавливаю путь непосредственно к C:\Program Files, он выполняет задачу удаления пустых каталогов согласно коду.

Почему это так?

Я написал командный файл, который я запустил как администратор. Как вы уже догадались, не повезло. Я попытался запустить его через cmd в режиме администратора, ничего больше. Есть ли способ, которым я могу изменить файл .class моего кода для запуска с правами администратора. Или есть способ запустить его в cmd с правами администратора. Сказать

java emptyFoldersRemover -runAsAdmin

Что-то вроде того?

Или мне нужно сделать исполняемый файл?

РЕДАКТИРОВАТЬ

Я снова подчеркиваю этот момент. Нет ли способа запустить java.exe с правами администратора в cmd, чтобы программа обрабатывалась с правами администратора?

String absolutePath=p;
try {
    path=new File(absolutePath);
    File listOfFolders[] = path.listFiles();
    for(int i=0;i<listOfFolders.length;i++)
    if(listOfFolders[i].isDirectory())
        System.out.println(listOfFolders[i]);
    for (int i = 0; i < listOfFolders.length; i++) 
    {
        if (listOfFolders[i].isDirectory()) 
        {
            if(listOfFolders[i].list().length>0) {
                /* if(listOfFolders[i].getName().equalsIgnoreCase("Program Files"))
                {
                   for(int j=0;j<listOfFolders[i].list().length;j++)
                   {
                       System.out.println(listOfFolders[i].list());
                   }
                }*/
                run(listOfFolders[i].getAbsolutePath());
            }
            else
            {
                noOfFolders++;
                System.out.println(noOfFolders);
                listOfFolders[i].delete();
            }
        }
    }
}
catch(Exception e)
{
    //e.printStackTrace();
}
return(noOfFolders);

3 ответа3

0

То, что вы спрашиваете, есть ли способ запустить ваше приложение "с повышенными правами". Для этого вы можете щелкнуть правой кнопкой мыши на cmd, который вы используете для запуска приложения, и выбрать "Запуск от имени администратора".

Если вы хотите всегда запускать приложение с повышенными правами, щелкните правой кнопкой мыши на файле cmd, свойствах, совместимости, а затем установите флажок "Всегда запускать от имени администратора".

Из комментариев на ваш вопрос, это звучит , как вы уже пробовали это , и это не работает для вас , - но это определенно делает работу, поэтому давайте сосредоточимся на том, почему она не могла работать для вас - вы позволили поднять? Вы случайно не отключили уведомления UAC? Пользователи часто думают, что отключая уведомления UAC, что они отключают сам UAC - это не так. Отключение уведомлений просто делает так, чтобы ОС не могла предложить вам повышение, поэтому она молча проваливает повышение прав.

0

для вашего второго пункта

откройте dos dos с правами администратора и запустите java.exe или любой другой exe-файл.

он будет работать от имени администратора

0

Я использовал Elevate для запуска привилегированных программ на Java, и он прекрасно работает. Вам просто нужно убедиться, что утилита elevate.exe находится в PATH, а затем префикс вашей исходной команды с помощью elevate:

C:\Program Files> elevate java emptyFoldersRemover

Это вызовет запрос UAC. Если вы решите разрешить это, ваша программа будет работать с повышенными привилегиями. Убедитесь, что используемая вами архитектура "повышенного уровня" соответствует архитектуре используемого вами JRE (например, если вы используете 64-разрядный файл java.exe, убедитесь, что вы повысили его с помощью 64- битовая версия элевата).

Обратите внимание, что некоторые антивирусные / антивирусные программы обнаруживают подозрительное поведение elevate.exe и автоматически помещают в карантин или удаляют его.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .