c# - 是什么原因导致此访问被拒绝错误?

标签 c# .net windows-7 process directory

编辑:使用“文档”而不是“我的文档”可以消除错误。我还建议使用 Windows 特殊文件夹而不是绝对路径。

我正在尝试用我正在编写的应用程序替换桌面上的所有快捷方式,该应用程序将有自己的快捷方式版本。我计划为新快捷方式提供一些与旧快捷方式相同的功能。在做其他事情之前,我认为打开快捷方式指向的文件或文件夹很重要。这是一段示例代码:

public partial class Form1 : Form
{
    Process p1, p2, p3, p4;

    public Form1()
    {
        InitializeComponent();
        p1 = new Process();
        p2 = new Process();
        p3 = new Process();
        p4 = new Process();

        p1.StartInfo.FileName = "cmd";
        p2.StartInfo.FileName = "c:\\Users\\Cheese\\My Documents";
        p3.StartInfo.FileName = "c:\\Users\\Cheese\\AppData";
        p4.StartInfo.FileName = "c:\\Program Files (x86)";
    }

    private void button1_Click(object sender, EventArgs e)
    {
        p1.Start();
    }
    private void button2_Click(object sender, EventArgs e)
    {
        p2.Start();
    }
    private void button3_Click(object sender, EventArgs e)
    {
        p3.Start();
    }
    private void button4_Click(object sender, EventArgs e)
    {
        p4.Start();
    }

}

Access Denied error

这是在 Windows 7 家庭高级版上。我在 Visual C# 2010 Express 中调试时收到错误。我打开了其他几个文件夹,例如 System32、AppData 以及同一驱动器上另一个分区上的各种文件夹。我能够打开各种音乐文件并运行不同的程序。除了“我的文档”之外,一切似乎都工作正常。我认为 Windows 文件夹比个人文件的默认位置有更大的限制。我认为这并不是真正的权限问题,但我什至无法猜测可能是什么问题。我可以用资源管理器打开我的文档。我可以将文件移入或移出目录。

这看起来是一件很简单的事情。我知道我对 Windows 的工作原理还有很多不完全了解的地方,但这种情况和其他一些情况让我觉得也许我对 Windows 的了解并不多。我可以查看哪些好书或网络资源来更好地掌握这个操作系统?从新手的角度来看,可能重点关注文件管理和系统权限?

最佳答案

您永远不应该使用这些硬编码路径。
正确的方法是将Environment.SpecialFolder枚举与Environment.GetFolderPath()结合起来,如下所示

string myDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

其他“SpecialFolder”枚举可以是 found here

GetFolderPath 与 SpecialFolder 枚举一起使用非常重要,因为它返回针对不同操作系统、操作系统的本地化以及用户可以执行的更改正确调整的位置其中一些位置。

关于c# - 是什么原因导致此访问被拒绝错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10306443/

相关文章:

c# - 哪种方式是从 Sbyte[] 转换为 Byte[] 的最佳方式

.net - NHibernate 和多个数据库后端 - 架构

c# - 从使用原始输入 API 检索的按键集合中获取字符串

windows-7 - Nullsoft安装程序,Win7,如何安装读/写数据目录?

c# - 对 Windows 窗体上的字段执行数据验证的最简单方法

c# - gridview 列宽未在绑定(bind)字段中的 asp.net 中设置

c# - 年、月和日参数描述了波斯历中无法表示的 DateTime

windows - 在 Windows 7 机器上进行 Hadoop 开发是否有很好的在线教程?

iphone - 原生Android应用程序和phonegap应用程序之间的区别

C#:GroupEvent 由于其保护级别而无法访问