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

问题描述:

编辑:使用“文档”而不是“我的文档”摆脱了错误。我也被推荐使用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没有太多了解。为了更好地掌握这个操作系统,我可以研究哪些好书或网络资源?从新手的角度来看,可能重点关注文件管理和系统权限?

+0

在Windows 7下“我的文档”是“文档”的连接点,它可能是连接处的启动问题。启动“c:\\用户\\奶酪\\文档”时是否出现同样的错误? – 2012-04-24 21:51:08

+0

您是否试图在用户档案中找到该文件夹​​? – Steve 2012-04-24 21:52:13

+0

解决方案的简单程度几乎可怜。使用“文档”而不是“我的文档”的作品。 – Cheese 2012-04-24 21:55:08

至于评论,

在Windows 7下“我的文档”是结到“文档”,试图发动对结的过程将失败,此错误。改为启动“c:\ Users \ Cheese \ Documents”。

或者,如果这是当前用户我的文档文件夹,你应该真的问系统的路径。

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

随着Windows 7“我的文档”已被重命名为“文档”。见Wikipedia。 您尝试打开的路径在您的操作系统中不存在。

+0

它在技术上是存在的,它只是它的一个连接点,当你试图将它作为一个进程启动时它就会失败。 – 2012-04-24 22:17:31

+0

我不这么认为。至少dir不会显示像这样的东西。并且联结sysinternals命令在那里也找不到任何联结。但是,如果您在My Documents下方导航并右键单击My Documents内的文件,您将看到该路径确实是.. \ Documents \ ... Windows 7不创建My Documents连接,但Explorer本身显示已翻译的文件夹用户名称。在我的德国机器上,它被称为“Eigene Dokumente”,当然在那里没有这样的文件夹。 – 2012-04-24 22:34:38

+0

http://en.wikipedia.org/wiki/Special_folder - 此链接显示%USERPROFILE%\ Documents文件的“我的文档”特殊文件夹的位置。然后在底部有一个表格,显示虚拟文件夹。 “我的文档”也作为虚拟文件夹存在。 **“用户的My Documents文件夹的虚拟文件夹;用作桌面虚拟文件夹的子项”**我对特殊文件夹和虚拟文件夹有什么样的想法,但我不太了解“我的文档” 。 – Cheese 2012-04-24 22:48:33

你不应该使用这些硬编码路径。
去与正确的做法是)加上Environment.GetFolderPath(在Environment.SpecialFolder枚举这样

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

其他“SpecialFolder”枚举可以found here

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

+0

谢谢,我会研究一下。 – Cheese 2012-04-24 22:01:27

+0

在我上面的代码中,这是(特殊文件夹)“cmd”能够在没有指定任何路径的情况下启动的原因吗?我甚至没有文件名中的扩展名。 – Cheese 2012-04-24 22:09:05

+1

cmd.exe是命令解释程序,位于系统PATH环境变量中包含的文件夹中。因此,操作系统检查PATH中的每个文件夹,以搜索以CMD开头的程序(bat,cmd,com或exe)。如果您尝试使用“记事本”,这将是相同的。 – Steve 2012-04-24 22:13:29