mj2p Posted November 23, 2009 at 10:02 PM Report Share #297344 Posted November 23, 2009 at 10:02 PM 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 Link to comment Share on other sites More sharing options...
softklin Posted November 24, 2009 at 10:06 AM Report Share #297382 Posted November 24, 2009 at 10:06 AM 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. Link to comment Share on other sites More sharing options...
mj2p Posted November 25, 2009 at 05:21 PM Author Report Share #297556 Posted November 25, 2009 at 05:21 PM 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. Link to comment Share on other sites More sharing options...
MetalFatigue Posted November 26, 2009 at 01:58 PM Report Share #297620 Posted November 26, 2009 at 01:58 PM Penso que terás de dar privilégios de administrador à aplicação. Nunca fiz isso, mas aqui está o que uma rápida pesquisa no google encontrou: http://www.developerfusion.com/code/7987/making-a-net-app-run-on-vista-with-administrator-priviledges/ Link to comment Share on other sites More sharing options...
mj2p Posted November 27, 2009 at 09:25 AM Author Report Share #297732 Posted November 27, 2009 at 09:25 AM Não me sabem por acaso dizer se em Windows 7 este manifesto ainda funcionará? Link to comment Share on other sites More sharing options...
apocsantos Posted November 27, 2009 at 12:25 PM Report Share #297752 Posted November 27, 2009 at 12:25 PM 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" Link to comment Share on other sites More sharing options...
mj2p Posted November 27, 2009 at 01:37 PM Author Report Share #297760 Posted November 27, 2009 at 01:37 PM 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? Link to comment Share on other sites More sharing options...
apocsantos Posted November 27, 2009 at 01:40 PM Report Share #297762 Posted November 27, 2009 at 01:40 PM 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" Link to comment Share on other sites More sharing options...
mj2p Posted November 27, 2009 at 03:02 PM Author Report Share #297780 Posted November 27, 2009 at 03:02 PM 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. Link to comment Share on other sites More sharing options...
apocsantos Posted November 27, 2009 at 03:29 PM Report Share #297785 Posted November 27, 2009 at 03:29 PM 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" Link to comment Share on other sites More sharing options...
mj2p Posted November 27, 2009 at 10:41 PM Author Report Share #297859 Posted November 27, 2009 at 10:41 PM 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(); Link to comment Share on other sites More sharing options...
andreb Posted November 28, 2009 at 01:08 PM Report Share #297900 Posted November 28, 2009 at 01:08 PM 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. ... Link to comment Share on other sites More sharing options...
mj2p Posted November 28, 2009 at 01:24 PM Author Report Share #297903 Posted November 28, 2009 at 01:24 PM 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á. Link to comment Share on other sites More sharing options...
MetalFatigue Posted November 28, 2009 at 01:55 PM Report Share #297905 Posted November 28, 2009 at 01:55 PM 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); } Link to comment Share on other sites More sharing options...
mj2p Posted November 29, 2009 at 07:27 PM Author Report Share #298009 Posted November 29, 2009 at 07:27 PM 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:? Link to comment Share on other sites More sharing options...
MetalFatigue Posted November 30, 2009 at 01:18 PM Report Share #298076 Posted November 30, 2009 at 01:18 PM 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 🙂 ) Link to comment Share on other sites More sharing options...
MetalFatigue Posted December 1, 2009 at 03:37 PM Report Share #298236 Posted December 1, 2009 at 03:37 PM 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) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now