什么可能导致此拒绝访问错误?

时间:2012-04-24 21:44:08

标签: 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 Home Premium上。我在Visual C#2010 Express中调试时收到错误。我在同一个驱动器上的另一个分区上打开了其他几个文件夹,如System32,AppData和各种文件夹。我能够打开各种音乐文件并运行不同的程序。除了My Documents之外,一切似乎都很好。我认为Windows文件夹比个人文件的默认位置有更大的限制。我认为它不是真正的权限,但我甚至猜不出可能是什么问题。我可以用资源管理器打开我的文档。我可以在目录中移动文件。

这看起来很简单。我知道有很多我不完全了解Windows是如何工作的,但是这种情况和其他一些事情让我觉得我可能并不太了解Windows的任何内容。为了更好地掌握这个操作系统,我可以研究哪些好书或网络资源?可能从新手的角度关注文件管理和系统权限?

3 个答案:

答案 0 :(得分:2)

你永远不应该使用这些硬编码路径 正确的方法是使用Environment.SpecialFolder枚举和Environment.GetFolderPath()这样的

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

其他'SpecialFolder'枚举可以是found here

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

答案 1 :(得分:1)

使用Windows 7“我的文档”已简单地重命名为“文档”。见Wikipedia。 您尝试打开的路径在您的操作系统中不存在。

答案 2 :(得分:1)

如评论所述,

在Windows 7下,“我的文档”是指向“文档”的Junction链接,尝试在联结上启动进程将失败并显示此错误。改为启动“c:\ Users \ Cheese \ Documents”。

或者,如果这是当前用户的文档文件夹,您应该向系统询问其路径。

var path=System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);