Jump to content
mj2p

Acesso negado a alguns directórios

Recommended Posts

mj2p

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

Share this post


Link to post
Share on other sites
softklin

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.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
mj2p

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.

Share this post


Link to post
Share on other sites
apocsantos

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.


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Share this post


Link to post
Share on other sites
mj2p

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?

Share this post


Link to post
Share on other sites
apocsantos

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.


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Share this post


Link to post
Share on other sites
mj2p

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.

Share this post


Link to post
Share on other sites
apocsantos

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. :)


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Share this post


Link to post
Share on other sites
mj2p

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();

Share this post


Link to post
Share on other sites
andreb

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.


...

Share this post


Link to post
Share on other sites
mj2p

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á.

Share this post


Link to post
Share on other sites
MetalFatigue

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);
                
            }

Share this post


Link to post
Share on other sites
mj2p

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:?

Share this post


Link to post
Share on other sites
MetalFatigue

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 :) )

Share this post


Link to post
Share on other sites
MetalFatigue

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)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.