c # win7: исключение несанкционированного доступа - PullRequest
2 голосов
/ 14 июня 2009

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

Теперь, когда программа находится в этой папке, возникает много проблем:

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, она будет работать!

Ответы [ 4 ]

5 голосов
/ 15 июня 2009

Хорошо - я нашел ответ:

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

FileStream fs = File.OpenRead(tmpfile)

вместо

FileStream fs = new FileStream(tmpfile, FileMode.Open);
1 голос
/ 06 февраля 2012

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

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

1 голос
/ 14 июня 2009

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

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

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

1 голос
/ 14 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...