new StreamWriter("log.txt", true)
пишет в текущий рабочий каталог, который может быть где угодно, включая сетевые ресурсы или места, к которым у вас нет прав записи.Всегда указывайте полный путь к любым файлам.Если вы хотите записать в файл, вам нужно убедиться, что вы пишете в место, к которому у вас есть доступ.Не запускайте приложение просто как администратор, это открывает все дыры в безопасности.
Возможно, вы хотите что-то вроде:
var p = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "myAppName");
if (!Directory.Exists(p)) Directory.CreateDirectory(p);
using (var sw = new StreamWriter(Path.Combine(p, "log.txt"), true)
{
sw.WriteLine(str);
}