#.net #winforms
#.net #winforms
Вопрос:
У меня есть приложение Winforms, которое должно создавать запись в определенный файл конфигурации во время использования. Как только я использую режим отладки, этот файл можно создать и записать в него, но как только я создаю проект установки и фактически устанавливаю приложение, я не могу получить доступ к следующему исключению.
Файл конфигурации находится в том же каталоге, что и program (в Program Files )
Код, который я использую для чтения / записи.
public static string[] GetDefaultConfigFile(string path)
{
string[] res = {};
if (File.Exists(GetInternalFileName(path)))
{
using (StreamReader tr = new StreamReader(GetInternalFileName(path)))
{
res = tr.ReadToEnd().Split(';');
}
}
return res;
}
public static void SaveDefaultConfigFile(string fileName, string path)
{
using (var tw = new StreamWriter(GetInternalFileName(path)))
{
tw.Write(fileName);
tw.Close();
}
}
private static string GetInternalFileName(string path)
{
return path "\setup.config";
}
Ответ №1:
Возможно, учетная запись, используемая для запуска этого кода, не имеет достаточных привилегий для записи в указанную папку ( Program Files
) . Если вы работаете под управлением Windows 7 или Vista standard, пользователям не разрешено выполнять запись в эту папку. В этом случае вы можете использовать пользовательскую папку c:usersusername
для хранения параметров конфигурации.
Также я бы упростил:
public static string[] GetDefaultConfigFile(string path)
{
return File.ReadAllText(path).Split(';');
}
public static void SaveDefaultConfigFile(string fileName, string path)
{
File.WriteAllText(path, fileName);
}
private static string GetInternalFileName(string path)
{
return Path.Combine(path, "setup.config");
}
Комментарии:
1. Спасибо, есть ли какой-нибудь способ принудительно запустить приложение с правами администратора?
2. @eugeneK, да, при запуске приложения вы щелкаете правой кнопкой мыши по исполняемому файлу и выбираете Запуск от имени администратора. Или в свойствах ярлыка, я думаю, на вкладке Совместимости есть флажок, где вы можете заставить этот ярлык всегда запускаться от имени администратора. В этом случае пользователю будет запрашиваться пароль администратора при каждом запуске ярлыка.
3. у меня нет запущенного приложения от имени администратора для этого приложения. Кроме того, внутри папки приложения есть папка, в которую NLog успешно записывает журналы.
4. @eugeneK, в этом случае вы могли бы попробовать предоставить разрешения на чтение / запись в папку, которую вы хотите записать. Я не знаю, что вы ожидаете от меня еще сказать. У программы недостаточно прав для записи в эту папку.
5. Как я могу предоставить такие разрешения? Я попытался создать app.manifest, в котором мне требовался доступ администратора, но приложение не отображает графический интерфейс, поскольку UIAccess имеет значение false, когда я устанавливаю для него значение true, я получаю сообщение об ошибке.