【问题标题】:Adding Files/Folders to Program Files x86 Folder with C#使用 C# 将文件/文件夹添加到 Program Files x86 文件夹
【发布时间】:2012-08-17 05:22:04
【问题描述】:

我正在尝试在 32 位 Program Files 文件夹中创建一个文件目录(文件夹)来存储用户将在程序中创建的数据。但是,当我尝试这样做时,它一直说访问被拒绝。无论如何,是否允许程序访问 32 位程序文件文件夹并向其添加后续文件夹和文件?下面是我的代码,由于没有权限而产生运行时错误。

string mainDirectory=Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)+"\\UKC Trial Reporter Files";
if (!Directory.Exists(mainDirectory))
{
    Directory.CreateDirectory(mainDirectory);
}

【问题讨论】:

  • 您可能必须将程序作为提升的进程运行。
  • 用户数据不应存储在 Program Files 目录下。如果您使用用户的目录(或 ProgramData),您将不会收到拒绝访问错误。

标签: c# file-permissions program-files


【解决方案1】:

将您的数据存储在Environment.SpecialFolder.ApplicationDataEnvironment.SpecialFolder.LocalApplicationDataEnvironment.SpecialFolder.CommonApplicationData(如果数据必须可供任何用户访问)。

切勿将其存储在 %ProgramFiles% 中。 %ProgramFiles% 用于... 程序文件:可执行文件、dll、app.config 文件。

除了安全原因之外,还有一个永远不要这样做的原因:卸载时,您的应用程序的安装程序必须扫描它创建的所有文件和文件夹。这是不可能的,当 installdir 中的文件列表在应用程序生命周期内发生更改时。

幸运的是,自从 Windows Vista 发布以来,我们就有了 UAC。

【讨论】:

    【解决方案2】:

    不要这样做

    Program FIles 就是这样;它应该包含 EXE 和静态资源。

    相反,您需要写入用户的SpecialFolder.ApplicationData 文件夹。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 2015-04-28
      • 2014-06-01
      相关资源
      最近更新 更多