c#vista无法访问app数据文件夹

时间:2010-10-10 13:14:03

标签: c# exception

我正在做一个项目,我必须生成一些日志[这是文本文件]。我通过线程生成日志[线程是必不可少的]到应用程序数据文件夹。但vista不会给我访问并抛出异常“访问被拒绝”。我很困惑。任何建议都会非常有帮助。感谢。

3 个答案:

答案 0 :(得分:3)

以管理员身份运行您的应用程序,或完全控制Users组的文件夹(这是不安全的)。

您还可以在申请中强制UAC elevation

答案 1 :(得分:2)

使用以下方法获取应用程序数据的路径吗?

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

通常,该目录可由本地用户写入,但 Web应用程序的情况并非如此。

为了回复您的上述评论,您可以通过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>

希望对你有所帮助。

[编辑] Ruel在我写作时刚刚添加了UAC链接。我的答案是重复;) 感谢他

答案 2 :(得分:1)

当您说“应用程序数据文件夹”时,是指您安装应用程序的位置,还是指操作系统认为“应用程序数据文件夹”的位置?

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.");
    }
}