File Writing em C: \ drive

2

Então, eu entendo que arquivos não podem ser criados ou excluídos sem privilégios de administrador na unidade C: \. Minha pergunta é a seguinte: Se um diretório na unidade C: \ for digitado ... digamos Arquivos de Programas , então não deve ser possível escrever arquivos lá?

Eu criei um programa que exclui diretórios vazios em uma pasta inteira (ou seja, inclui subpastas)

Eu entendo que a unidade C: \ requer permissões, mas uma vez que meu programa achar que os Arquivos de Programas são um diretório "não vazio", ele insere Arquivos de Programas, mas ainda assim, suas permissões de gravação são negadas. Eu sei disso porque me certifiquei de que o programa listasse todos os diretórios que ele localizasse no caminho fornecido. Portanto, CADA pasta presente na unidade C: \ é impressa. Nenhuma pasta foi deletada embora.

Considerando que quando eu definir o caminho diretamente para C: \ Arquivos de Programas, ele executa a tarefa de excluir diretórios vazios de acordo com o código.

Por que isso acontece?

Eu escrevi um arquivo em lotes que eu executei como administrador. Como você deve ter adivinhado, sem sorte. Eu tentei executá-lo através de cmd no modo de administração, nada novamente. Existe uma maneira que eu possa alterar o arquivo .class do meu código para ser executado com privilégios de administrador. Ou existe uma maneira de executá-lo em cmd com privilégios de administrador. Diga

java emptyFoldersRemover -runAsAdmin

Algo assim?

Ou preciso criar um arquivo executável?

EDITAR

Eu enfatizo esse ponto novamente. Existe uma maneira de executar java.exe com permissões de administrador no cmd para que o programa seja tratado com privilégios de administrador?

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);
    
por Torcellite 19.12.2012 / 04:01

3 respostas

0

O que você está perguntando é se existe uma maneira de executar seu aplicativo "elevado". Para fazer isso, você pode clicar com o botão direito no cmd que você está usando para iniciar o aplicativo e escolher Executar como administrador.

Se você quiser sempre iniciar o aplicativo elevado, clique com o botão direito do mouse no arquivo cmd, propriedades, compatibilidade e marque a caixa de seleção "Sempre executar como administrador".

A partir dos comentários sobre a sua pergunta, parece que você tentou isso e não funcionou para você - mas definitivamente o funciona , então vamos nos concentrar no motivo pelo qual ele pode não ter trabalhado para você - você tem permissão para elevar? Você, por acaso, desativou as notificações do UAC? Os usuários geralmente acham que, ao desabilitar as notificações do UAC, estão desabilitando o próprio UAC - esse não é o caso. Desativar as notificações apenas faz com que o sistema operacional não o avise para elevar, por isso, ele silenciosamente falha na elevação.

    
por 19.12.2012 / 05:39
0

para seu segundo ponto

abra o dos prompt como administrador e execute o seu java.exe ou qualquer outro exe.

ele será executado como administrador

    
por 19.12.2012 / 05:43
0

Eu usei Elevar para executar com privilégios Programas Java, e funciona muito bem. Você apenas tem que certificar-se de que o utilitário elevate.exe está no PATH e, em seguida, prefixar seu comando original com elevate :

C: \ Arquivos de programas > elevate java emptyFoldersRemover

Isso acionará um prompt do UAC. Se você optar por permitir, seu programa será executado com privilégios elevados. Certifique-se de que a arquitetura do binário "elevate" que você usa corresponde à arquitetura do JRE que você está usando (por exemplo, se você estiver usando um java.exe de 64 bits, certifique-se de elevá-lo com o 64- versão de bit de elevar).

Observe que alguns programas antivírus / antimalware detectam o comportamento suspeito do elevate.exe e o colocam em quarentena ou o excluem automaticamente.

    
por 19.12.2012 / 09:23