C # Vista не дает доступ к папке данных приложения - PullRequest
1 голос
/ 10 октября 2010

Я делаю проект, в котором мне нужно создать несколько журналов [которые являются текстовыми файлами]. Я создаю журналы потоком [поток имеет важное значение] для папки данных приложения. Но vista не дает мне доступ и выдает исключение «доступ запрещен». Я очень смущен. Любое предложение будет очень полезным. Спасибо.

Ответы [ 3 ]

3 голосов
/ 10 октября 2010

Запустите приложение от имени администратора или предоставьте полный контроль над папкой группе Users (что небезопасно).

Вы также можете принудительно установить повышение UAC в своем приложении.

2 голосов
/ 10 октября 2010

вы получаете путь к данным приложения, используя следующий метод?

System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData);

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

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

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="highestAvailable" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

Надеюсь, что он вам помог.

[Edit] Рюэль только что добавил ссылку UAC, пока я былпишу.Мой ответ тогда дублирует;) Слава ему

1 голос
/ 10 октября 2010

Когда вы говорите «папка данных приложения», подразумеваете ли вы папку, в которую вы установили приложение, или вы имеете в виду то, что операционная система считает «папкой данных приложения»?

static void Main(string[] args)
{
    string folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"MyCompany\MyApp");
    Directory.CreateDirectory(folder);
    using (StreamWriter writer = new StreamWriter(Path.Combine(folder, "app.log"), false))
    {
        writer.WriteLine("Logged.");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...