• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

mj2p

Acesso negado a alguns directórios

17 mensagens neste tópico

Pessoal, estou a construir uma aplicação que necessita de mapear todos os directórios da partição C:. O problema é o seguinte: quando acedo a algumas pastas como C:\Programas lá vem a excepção UnauthorizedAcessException

Por favor, digam-me como posso dar a volta a esta situação.

Desde já agradecido

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Essas pastas são provavelmente o System Volume Information que encontras na raiz de cada disco, entre outras. Como o Windows não gosta que ninguém vá lá mexer, ele dá-te acesso negado.

Podes colocar um try catch no código, ficando algo do género

try {

// teu codigo aqui de dentro do ciclo aqui

} catch (UnauthorizedAcessException ex) {
// simplesmente ignoramos esta pasta
}

Atenção que este código tem de estar dentro do ciclo, porque no caso de se dar a excepção, ele continua a executar as restantes iterações.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O meu código tem esse bloco try/catch, para conseguir ver a aplicação a correr e fazer os testes mínimos. No entanto, aquilo que eu referi é apenas uma pequeníssima parte daquilo que eu quero que seja a minha aplicação final, que será um cliente de FTP. Por isso, já estás mesmo a ver que não dá jeito nenhum a minha aplicação negar o acesso do utilizador a algumas pastas...

Precisava mesmo de um método prático para dar a volta a esta questão de segurança.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não me sabem por acaso dizer se em Windows 7 este manifesto ainda funcionará?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em teoria funciona perfeitamente. Na pratica não me dei ao trabalho de testar no Windows 7, mas como sempre deve haver solução para contornar esse problema, nem ke seja elevares a app a previlegios de administrador.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desde já informo que apesar de já ter incluído o manifesto na minha aplicação ela continua sem conseguir a aceder aos directórios "proibidos" através do Windows 7. Quando corro a aplicação já me aparece aquela message box que pergunta ao utilizador se confia na aplicação que está a correr mas quando tento aceder a directórios do C: lá vem a p**a da excepção... Ninguém conhece mais nenhuma solução?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimentas-te compilar e correr a app com previlégios de administrador??

Não tenho nenhum Windows 7 a jeitos para fazer testes, mas seguindo a logica de SO, tens de conseguir aceder, nem que para isso tenhas que executar como system.

Diz se conseguiste que funcione ao executares a app como administrador. Assim terei um ponto de partida mais solido para "desmoer" um bocado a mioleira a dar a volta a isso.... Não acredito que o Windows 7 seja assim tão duro de roer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Compilei já com o manifesto e nada. Quando corre a aplicação aparece a tal message box que pede para confirmar que a aplicação é de confiança (coisa que não acontecia antes de adicionar o manifesto) mas depois, quando carrego para me apresentar a lista dos directórios de C: aparece outra vez a excepção chatinha...

Aqui em casa não tenho nenhum Vista para testar, mas na segunda-feira já faço os testes no laboratório onde trabalho. Se alguém entretanto testar em Windows 7 e encontrar alguma solução diga.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tanto quanto consegui ler no site da microsft não existe nada sobre o assunto.

Entretanto vou ver se acedo a uma maquina Windows 7 e testar. Em Vista consegui fazer um form e mapear todo o disco, sem stress apenas com aquele pedaço no manifesto.

Vamos a ver o que o Windows Seven traz de novo. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olha já agora, que método estás a utilizar para aceder aos directorios de uma determinada pasta? Se calhar pode ser esse o problema. Eu tenho da seguinte forma:

DirectoryInfo dir = new DirectoryInfo ("C:\");

DirectoryInfo[] subDirs = dir.GetDirectories();

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, mj2p tenta abrir esses directórios que te dão erro mesmo com o "explorador do window", provavelmente ele não te deixa abrir porque não tens direitos para tal e sendo assim o teu cliente de FTP não poderia ser uma excepção.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, mj2p tenta abrir esses directórios que te dão erro mesmo com o "explorador do window", provavelmente ele não te deixa abrir porque não tens direitos para tal e sendo assim o teu cliente de FTP não poderia ser uma excepção.

Boas. Se calhar fui eu que não percebi bem, mas quando dizes abrir pelo explorador do windows referes-te a não usar a minha aplicação e usar o explorer, é isso?

apocsantos, diz-me como é que estás a fazer para abrir os directórios que eu a pouco testei num XP e nem aí dá.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fim de semana e tal, já tive aqui a fazer um teste rapidíssimo. No windows 7, nem sequer precisei do manifesto para retornar os nomes dos subdirectorios do "program files". Não estarás a usar uma conta limitada? Eu estou a usar uma conta de administrador. Penso que com uma conta limitada terás de pedir password. Devo dizer que o UAC está como vem de default, nunca lhe mexi. E em Windows 7 é bem menos "chato".

O código simples foi seguinte, no form_load:

            DirectoryInfo di = new DirectoryInfo("C:/Program Files/");
            DirectoryInfo [] rgFiles = di.GetDirectories() ;
            foreach (DirectoryInfo fi in rgFiles)
            {
                MessageBox.Show(fi.Name);
                
            }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, tudo certo até aqui. E por exemplo fazer com que este bocado de código funcione?

DirectoryInfor dir = new DirectoryInfo ("C:/Programas");
DirectoryInfo subDirs = dir.GetDirectories();

foreach(DirectoryInfo d in subDirs)
{
MessageBox.Show(d.FullName);
}

Mapear o C: tudo bem. E o conteudo dos sub-directórios de C:?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimentarei quando chegar a casa logo a noite. Mas assim de repente, e eu não estou muito treinado em C#, não deveria esta linha:

DirectoryInfo subDirs = dir.GetDirectories();

ser assim:

DirectoryInfo [] subDirs = dir.GetDirectories();

Poderá funcionar. Das duas formas, como disse não estou muito treinado em C# (algo que estou a pensar em resolver para breve :) )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem pelo que estive a ver tens um problema (além de teres aquele erro da falta de  [] e de um r a mais no DirectoryInfor, mas deve ter sido lapso de escrita), não com a falta de permissões, mas com os nomes. O windows internamente usa à mesma "program files", mas tem um Alias para as várias línguas para certos directórios. Ou seja "Programas" é na verdade "Program Files". Este é o problema.

Se fores buscar tudo através do C:/ dinamicamente este problema desaparece. Uma vez que ele devolve o nome interno (Program Files)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora