Pergunta

Eu estou chamando CreateFile () para criar um arquivo no diretório de dados do programa. Estou usando SHGetSpecialFolderPath () para obter o nome dir.

Eu tenho um usuário com Vista para quem CreateFile () está retornando erro 5 (acesso negado). Seria bom se eu sabia onde CreateFile () foi realmente a tentar criar o arquivo para que possamos verificar suas permissões de pasta. O problema com o Vista (UAC) é, não é tentar criar o arquivo no diretório I passado. Também poderia ser em um diretório VirtualStore. Uma fonte adicional de confusão é este usuário é alemão e embora SHGetSpecialFolderPath está retornando () "C: \ Program Data \ blah blah" como o caminho, eu não acho que isso é realmente onde está o caminho. Acho alemão Vista usa a palavra alemã para "Dados do Programa". Eu gostaria de ser capaz de dizer ao usuário "Este é o caminho exato onde estamos a tentar criar o arquivo. Verifique as permissões sobre esta pasta."

Eu sei que você pode obter o caminho de um identificador de arquivo aberto, mas neste caso o CreateFile () está a falhar, então eu não ter um identificador aberto. Como posso obter Vista para me dizer o caminho real onde ele está tentando criar o arquivo?

Foi útil?

Solução

Fire-se o monitor do processo e ver o que ele faz: http://technet.microsoft.com/en-us/sysinternals/bb896645. aspx

Outras dicas

Se com o UAC os caminhos usados ??não são os que você quer, então o redirecionamento está em vigor. Para se certificar de que o redirecionamento não ocorrer, adicionar um manifesto na sua aplicação que indica para o Vista que a sua candidatura está devidamente codificado e conscientes de restrições de acesso (ou seja, você não escreve para, por exemplo, HKLM ou os programas de pasta se seu aplicativo não precisa de privilégios de administrador para executar).

Mas a sua aplicação deve ser capaz de escrever para a pasta APPDATA (se é isso que você realmente usar).

Certifique-se de que você está usando CSIDL_APPDATA e não CSIDL_COMMON_APPDATA (este último sendo acessível somente com privilégios de administrador).

Para encontrar o caminho real (o que você esperaria) dizer que o usuário digite% APPDATA% para a barra de pesquisa (ou pressione Windows + R, digite% APPDATA%, enter). Isto irá abrir o explorador em que pasta.

O meu entendimento é que ProgramData é usado pelo Vista para arquivos de gravação que estavam tentando ser escrito dentro C: \ Arquivos de Programas, mas não conseguiu, pois a menos que você estiver executando o aplicativo como administrador você não pode escrever arquivos de programa dentro. Talvez você deve tentar salvar seus arquivos para a pasta AppData como o utilizador actual.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top