Почему мое приложение C# не может создать файлы в Windows 7?

У меня есть приложение C#, которое создает файл настроек для себя для хранения текущего состояния определенных визуальных элементов. Это приложение работает просто великолепно на любой машине, которая не запускает Windows 7, но на тех машинах мы получаем ошибку, что файл настроек не может быть создан, потому что у пользователя нет разрешения. Теперь, я мог устранить эту проблему путем движения в каждый компьютер, при входе в систему как администратор и давая пользовательский доступ для чтения и доступ для записи на папке программы для приложения, которое мы установили, но должен быть лучший путь.

Это походит в XP, Вы получили доступ для записи на папках, которые Вы создали по умолчанию, но это больше не имеет место. Существует ли установка, я должен в установочном пакете сделать эту работу?

9
задан Jonathan Beerhalter 23 April 2010 в 15:56
поделиться

6 ответов

Дело в том, что вы не должны хранить файлы настроек в папке программы. Microsoft давно отговаривала от этого, но с Vista IIRC начала ужесточать правила.

Используйте Environment.SpecialFolders.ApplicationData (и т. Д.), Чтобы найти наиболее подходящее место для размещения настроек. Или используйте инфраструктуру настроек .NET, которая делает это автоматически за вас.

19
ответ дан 4 December 2019 в 06:26
поделиться

вы пытаетесь создать файлы в папке установки? вы должны использовать папку данных пользователя для данных, а не папки установки. Используйте папку Environment.SpecialFolders.ApplicationData , чтобы получить папку, в которую вы можете писать.

7
ответ дан 4 December 2019 в 06:26
поделиться

Вы, вероятно, работаете как администратор на своем компьютере, отличном от Windows 7, который может писать где угодно. Обязательно сохраните все данные для каждого экземпляра пользователя в папке AppData (в роуминге, если он должен следовать за ними с компьютера на компьютер, или локально, если это кеш, или локально только на компьютере). Если вам нужно поделиться настройками между пользователями, используйте папку C: \ ProgramData с соответствующими разрешениями.

Программа не должна пытаться сохранять настройки в своем установочном каталоге.

Обязательно используйте SpecialFolders вместе с Environment.GetFolderPath , чтобы получить нужные местоположения. Вы никогда не должны жестко кодировать пути, потому что они могут быть разными в разных версиях И языках. (Я знаю, что в немецкой версии XP это были не Program Files , а Program !)

4
ответ дан 4 December 2019 в 06:26
поделиться

Это является недостатком безопасности в вашей программе, потому что ваша программа записывает информацию в программный каталог (который и должен быть защищен). Если речь идет об устранении основной причины, рассмотрите возможность использования перечисления SpecialFolder или статические элементы в приложении , например CommonAppDataPath , для записи вашей информации в более подходящее место.

Если предположить типичный подход к записи файла через путь, это тривиальное исправление, и нет веской «целесообразной» причины не исправлять основную причину. Если вы не знаете, как управлять путем, рассмотрите возможность использования Path.Combine () . Он сделает это за вас.

2
ответ дан 4 December 2019 в 06:26
поделиться

В общем, вы не должны записывать данные программы в какую-либо папку под Program Files (даже если вы создали эту папку). Вы должны использовать Environment.GetFolderPath (...) , чтобы выяснить, куда поместить данные вашего приложения. Вы можете передать одно из многих перечислений здесь - вы, вероятно, захотите Environtment.SpecialFolder.CommonApplicationData

2
ответ дан 4 December 2019 в 06:26
поделиться

Это приложение отлично работает на любой машине, которая не работает под управлением Windows 7

Неправильно! Он работает только на этих машинах , если вы работаете от имени администратора. Я думаю, что вы обнаружите, что ваша программа сломана в Windows XP, если вы попытаетесь запустить ее практически на любом бизнес-компьютере, а не на домашнем компьютере.

Вместо этого такого рода информация должна поступить в одну из специальных папок Application Data.

3
ответ дан 4 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: