【问题标题】:c# win7: unauthorizedaccessexceptionc# win7: 未授权访问异常
【发布时间】:2009-06-14 18:27:29
【问题描述】:

我正在用 c# 为 Windows7 编写一个运行良好的程序... 但现在我开始构建一个将程序文件复制到“C:\Program Files”的设置。

现在当程序在那个文件夹中时会出现很多问题:

1) 如果我取消 OpenFileDialog,我会得到一个异常

2) 我的程序不再将文件写入 AppData 文件夹

3) 程序因权限问题无法打开自己目录下的实习生文件

我不知道我能做什么......

有人可以帮我吗?

编辑:

也许你没有理解我的问题。

我编写了一个在 C:\myprogram 中运行良好的程序。 我制作了一个将文件复制到 C:\Program Files 目录的安装程序,当我将文件复制到该目录时也是如此

  • 我的程序只打开自己的目录中的文件
  • 我的程序打开并写入文件到 AppData 文件夹
  • 我的程序可以在 rtb 中打开 .txt 等文件。在那里将使用 OpenFileDialog

这3点不行!

如果我的程序位于 Program Files 文件夹中,则无法打开 C:\Program Files\myprogram\xsl\test.xsl 等文件,也无法将文件写入 AppData 文件夹。

如果我将我的程序安装到 C:\lalala 中,它就会工作!

【问题讨论】:

    标签: c# windows-7


    【解决方案1】:

    好的 - 我找到了答案:

    我必须使用

    FileStream fs = File.OpenRead(tmpfile)
    

    而不是

    FileStream fs = new FileStream(tmpfile, FileMode.Open);
    

    【讨论】:

      【解决方案2】:

      要将文件复制到 Program Files 或任何特权位置,该过程必须由提升的管理员运行。由于您正在谈论“复制”文件和“OpenFileDialog”,因此听起来您正在运行 .NET 进程来进行复制,而不是 Windows 安装程序。通常,这应该由安装程序而不是您的应用程序来完成。您的应用需要在其清单中设置 requireAdministrator 或仅针对该特定操作进行提升。有关更多信息,您应该阅读 UAC。首先,我建议您阅读 CodePlex 上的 UAC: The Definitive Guide

      【讨论】:

        【解决方案3】:

        您确实应该使用 Windows 安装程序。它负责处理与安装相关的问题,并确保提升其权限级别以完成必要的工作。

        如果您没有得到适当的提升,UAC 会在幕后做很多事情,这可能会完全改变您的程序查看文件系统的方式。

        另外,当你打开程序目录中的文件时,你只能以只读模式打开这些文件,否则你会得到一个文件异常。

        【讨论】:

          【解决方案4】:

          或者,如果上述解决方案不起作用('System.IO.FileStream' 不包含采用 1 个参数的构造函数),请尝试以下操作:

          FileStream 文件 = new FileStream(fileName, FileMode.Open, FileAccess.Read);

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-07-01
            • 2018-08-21
            • 1970-01-01
            • 2016-05-11
            • 1970-01-01
            相关资源
            最近更新 更多