Windows 7 Windows 7在“中创建文件夹”;“程序文件”;C#代码失败甚至认为我有管理员权限!

Windows 7 Windows 7在“中创建文件夹”;“程序文件”;C#代码失败甚至认为我有管理员权限!,windows-7,directory,Windows 7,Directory,在VS 2008 WPF C#代码中,我无法在Windows 7 64位计算机上的“program files”文件夹下创建文件。我在以下代码中得到的错误 myFile = File.Create(logFile); 下面是一个例子。(这是innerException堆栈跟踪) at System.IO.\uu Error.WinIOError(Int32 errorCode,字符串maybeFullPath) 在System.IO.FileStream.Init(字符串路径、

在VS 2008 WPF C#代码中,我无法在Windows 7 64位计算机上的“program files”文件夹下创建文件。我在以下代码中得到的错误

        myFile = File.Create(logFile);
下面是一个例子。(这是innerException堆栈跟踪)

at System.IO.\uu Error.WinIOError(Int32 errorCode,字符串maybeFullPath)
在System.IO.FileStream.Init(字符串路径、文件模式、文件访问权限、Int32权限、布尔用户权限、文件共享、Int32缓冲大小、文件选项选项、安全属性secAttrs、字符串msgPath、布尔bFromProxy)
位于System.IO.FileStream..ctor(字符串路径、文件模式、文件访问访问、文件共享、Int32 bufferSize、文件选项)
在System.IO.File.Create处(字符串路径)
在C:\Projects\MyPricingApp\App.xaml.cs中的MyFirm.MyPricingApp.UI.App.InitializeLogging()中:第150行
在C:\Projects\MyPricingApp\App.xaml.cs中的MyFirm.MyPricingApp.UI.App.Application\u Startup(对象发送器,StartupEventArgs e)中
在System.Windows.Application.OnStartup(StartupEventArgs e)上
在System.Windows.Application.b__0上(对象未使用)
位于System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调、对象参数、布尔isSingleParameter)
位于System.Windows.Threading.ExceptionWrapper.TryCatchWhen(对象源、委托回调、对象参数、布尔isSingleParameter、委托catchHandler)
这似乎与Windows7中的UAC有关,因为既然我的用户已经是机器上的管理员,我为什么还要得到这个呢

此外,由于WinIOError具有安全属性,我认为这与Windows7处理安全性的“新方法”有关


我试图浏览到“ProgramFiles”文件夹,在该文件夹下创建日志文件夹和文件。我可以手动创建文件夹,但当我尝试创建文件时,会出现类似的“拒绝访问”异常。

由于启用了UAC,程序不会以管理权限运行,即使您的帐户是管理员。
为了拥有管理权限,您需要右键单击应用程序,然后单击以管理员身份运行

但是,您的程序在安装后不应向程序文件写入任何内容,安装更新时除外。

相反,您应该将日志文件存储在用户的应用程序数据文件夹中。

什么是
errorCode
和相应的错误消息?Exception=System.UnauthorizedAccessException error message=“访问路径'C:\Program Files\MyFirm\MyPricingApp\logs\Pricing-2010-04-25.log'被拒绝。”,我正在修改现有的生产应用程序。因此,将文件夹位置从“Program Files”下更改为其他位置不是一个选项:)然后您将始终需要以管理员身份运行,并且您的用户会因此讨厌您。您可以修改程序文件中文件夹的权限,以授予每个人写访问权限,但这会造成安全漏洞。你真的应该移动日志文件。谢谢SLaks是的,我知道安全漏洞!但是我该如何改变UAC或其他什么来让我的程序暂时成功运行呢?我不熟悉Windows7。我了解不在程序文件下存储文件和数据的最佳做法,但正如我之前所说,现在在应用程序中更改此选项是不可行的。我将查看您的建议,并在本周发布此代码后尝试对其进行更改…您需要在安装过程中更改文件夹的ACL以授予写入权限。@SLaks感谢您提出的修复建议!我禁用了用户的UAC,它工作了!此外,我发现app.config中的日志文件路径设置为C:\program files\…,因此我将日志文件位置移动到应用程序数据文件夹,并重新启用UAC:)
      at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
   at System.IO.File.Create(String path)
   at MyFirm.MyPricingApp.UI.App.InitializeLogging() in C:\Projects\MyPricingApp\App.xaml.cs:line 150
   at MyFirm.MyPricingApp.UI.App.Application_Startup(Object sender, StartupEventArgs e) in C:\Projects\MyPricingApp\App.xaml.cs:line 38
   at System.Windows.Application.OnStartup(StartupEventArgs e)
   at System.Windows.Application.<.ctor>b__0(Object unused)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)