harili Ответов: 1

Как это исправить : system.unauthorizedaccessexception: доступ к пути запрещен


Всем привет, я пытаюсь автоматически запустить свое приложение, когда включаю компьютер. Я написал эту программу в своем коде :

if (Convert.ToInt32(_param.AUTOMATIC_LAUNCH) == 1)
{
    registryKey = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", true);
    registryKey.SetValue("Quick",Process.GetCurrentProcess().MainModule.FileName.ToString());
}
if (Convert.ToInt32(_param.AUTOMATIC_LAUNCH) == 0 && registryKey != null)
{
    registryKey.DeleteValue("Quick", true);
}


Ключ действительно находится в папке : "Software\Microsoft\Windows\CurrentVersion\Run". Но у меня есть это сообщение, которое появляется в моем журнале :

Система.UnauthorizedAccessException: доступ к пути 'C:\WINDOWS\System32\config_borne-да.Ини отказано.
в System.IO.__ошибка.WinIOError(Int32 errorCode, String maybeFullPath) (....)

Что я уже пробовал:

Я попытался предоставить авторизацию пользователю в папке моего приложения, но это не сработало. Кроме того, "config-borne.ini" - это файл, который не существует.

BillWoodruff

где именно происходит ошибка ?

1 Ответов

Рейтинг:
2

Dave Kreskowiak

Все под Windows доступно только для чтения всем, кроме администраторов.

Вдобавок ко всему, предполагая это .INI-файл действительно является частью вашего приложения, ваше приложение также должно будет использовать права администратора пользователей, поэтому вам придется добавить app.manifest в свой проект, чтобы включить его.

Но еще лучшим решением было бы поставить свой .INI-файл где-то более уместен, чем под папкой Windows, например под C:\ProgramData.

И даже лучше того, почему вы вообще используете ан .INI-файл, когда есть лучшие альтернативы, такие как XML или JSON?

И если подумать об этом немного больше, то может быть даже так, что вы не используете полные пути при указании вашего файла для чтения/записи. Это будет проблемой, потому что ваш код делает предположение о том, что такое "текущий каталог", и это может измениться, когда вы этого не ожидаете. Всегда создавайте полные пути к файлам, созданным из хорошо известных местоположений. Google для "среды C#.GetFolderPath" для получения дополнительной информации. Обязательно посмотрите ссылку на окружение.Специальная папка документации для того, что передать в этот вызов метода.