2009-06-14 2 views
2

Я пишу программу в C# для Windows7, которая работает очень хорошо ... Но теперь я начал создавать установку, которая копирует файлы программы в «C: \ Program Files».C# win7: unauthorizedaccessexception

В настоящее время существует много проблем, когда программа находится в этой папке:

1) Если я отменить OpenFileDialog я получаю исключение

2) Моя программа не записывать файлы в папка AppData больше

3) программа не может открыть файлы стажера в своем собственном каталоге из-за разрешения

Я не знаю, что я могу сделать ...

Может кто-нибудь мне помочь?

EDIT:

Может быть, вы не поняли мою проблему.

Я написал программу, которая отлично работает в C: \ myprogram. Я сделал инсталлятор, который копирует файлы в C: каталог \ Program Files, это то же самое, когда я копирую мои файлы в этот каталог

  • Моей программа только открывает файлов в собственного каталога
  • Моя программа открывает и записывает файлы в папке AppData
  • Моя программа может открывать файлы, такие как .txt в RTB. Там будет использоваться OpenFileDialog

Это 3 балла не работает!

Если моя программа находится в папке Program Files, она не может открыть файл, такой как C: \ Program Files \ myprogram \ xsl \ test.xsl, и не может записать файл в папку AppData.

Если я установлю свою программу на C: \ lalala, это сработает!

ответ

5

Ok - Я нашел ответ:

Я должен использовать

FileStream fs = File.OpenRead(tmpfile) 

вместо

FileStream fs = new FileStream(tmpfile, FileMode.Open); 
1

Для копирования файлов в файлы программы или в любое привилегированное местоположение процесс должен выполняться администратором с повышенными правами. Поскольку вы говорите о «копировании» файлов и «OpenFileDialog», похоже, что вы выполняете процесс .NET для копирования, а не в установщик Windows. Обычно это должно выполняться установщиком, а не вашим приложением. Вашему приложению необходимо установить requireAdministrator в свой манифест или поднять только для этого конкретного действия. Для получения дополнительной информации вы должны прочитать UAC. В начале я предлагаю вам прочитать UAC: The Definitive Guide о CodePlex.

1

Вы действительно должны использовать программу установки Windows. Он заботится о проблемах, связанных с инсталляцией, и гарантирует, что его уровень привилегий повышен, чтобы выполнить необходимую работу.

UAC будет делать много вещей за кулисами, если вы неправильно подняты, что может полностью изменить способ, которым ваша программа видит файловую систему.

Кроме того, когда вы открываете файлы, находящиеся в каталоге программ, вы можете открывать только эти файлы только в режиме «только для чтения» или вы можете получить исключение для файла.

1

В качестве альтернативы, если указанное решение не работает ('System. IO.FileStream 'не содержит конструктор, который принимает 1 аргумент), тогда попробуйте это:

FileStream file = new FileStream (fileName, FileMode.Open, FileAccess.Read);

Смежные вопросы