【问题标题】:Access to the path 'c:\ApplicationFolder' is denied拒绝访问路径“c:\ApplicationFolder”
【发布时间】:2010-09-26 17:35:21
【问题描述】:

我在远程 Windows 客户端上遇到一个奇怪的错误(使用 C# 2.0 的 WinForm 应用程序)

错误消息:对路径“c:\ApplicationFolder”的访问被拒绝。

堆栈跟踪:在 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)

让我说我知道我不应该将应用程序文件夹直接放在 c:\ 文件夹之外。这是一个我无法控制的旧应用程序。

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    在您的应用程序中创建和嵌入清单文件以获得您的应用程序的管理权限

    Executable: IsUserAdmin.exe 
    Manifest:IsUserAdmin.exe.manifest
    Sample application manifest file:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
      <assemblyIdentity version="1.0.0.0"
         processorArchitecture="X86"
         name="IsUserAdmin"
         type="win32"/> 
      <description>Description of your application</description> 
      <!-- Identify the application security requirements. -->
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel
              level="requireAdministrator"
              uiAccess="false"/>
            </requestedPrivileges>
           </security>
      </trustInfo>
    </assembly>
    

    这里 requireAdministrator 说你的应用程序需要管理员权限 当用户启动您的应用程序时,这将导致确认对话。

    【讨论】:

      【解决方案2】:

      您可能正在尝试对只读文件进行写访问。

      【讨论】:

      • 至少我就是这样
      【解决方案3】:

      System.IO.FileStream.Init 听起来像是在打开文件,而不是文件夹。文件是什么?

      您确定该文件存在吗?它不是由另一个应用程序打开的吗?您是否正在尝试写入文件?它是锁定的还是只读的?

      我们需要查看打开文件的代码。

      【讨论】:

        【解决方案4】:

        这可能归结为您不应该将应用程序文件夹放在那里的原因:标准用户默认没有写入权限。由于大多数人以管理员身份运行 Windows,这通常不是问题,但如果您尝试在最近更新了安全策略的公司环境中安装,您会突然遇到严重问题。

        您检查过文件夹的权限吗?

        【讨论】:

          【解决方案5】:

          同意进程监视器很有帮助,节省了我一天的几个小时。如果 Path.Combine 的参数翻转了,所以我最终尝试写入目录来代替文件。调试中没有提示,进程 mon 立即出现。

          【讨论】:

            【解决方案6】:

            应用程序是否至少从配置文件/注册表/数据库表中加载“应用程序文件夹”?如果是这样,当您将该值更改为“我的文档”文件夹中的某个值时会发生什么?

            我看到你添加了用户是管理员并且拥有完整的管理员权限,所以我不得不问一个显而易见的问题——该文件夹是否存在于代码认为应该存在的位置?

            【讨论】:

              【解决方案7】:

              一个问题,一个建议。

              消息中报告的文件路径是否完全与文件夹的名称匹配 - 字母大小写、空格、下划线、重音符号等等?

              为什么?我见过一些奇怪的案例,这会导致问题。

              建议:使用ProcessMonitor(来自 SysInternals,现在是 Microsoft 的一部分)来查看对文件夹的访问,您将看到有关错误的更多详细信息 - 如果您看到的错误报告不准确,这尤其有用。

              【讨论】:

                猜你喜欢
                • 2011-03-29
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-04-02
                • 2010-11-29
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多