【问题标题】:What could be causing this Access Denied error?什么可能导致此访问被拒绝错误?
【发布时间】:2012-05-05 14:14:27
【问题描述】:

编辑:使用“文档”而不是“我的文档”可以消除错误。还建议我使用 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();
    }

}

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

这似乎是一件很简单的事情。我知道有很多我不完全了解 Windows 是如何工作的,但是这种情况和其他一些情况让我觉得我可能对 Windows 真的一无所知。我可以查看哪些好书或网络资源来很好地掌握这个操作系统?从新手的角度来看,可能侧重于文件管理和系统权限?

【问题讨论】:

  • 在 Windows 7 下,“我的文档”是指向“文档”的 Junction 链接,它可能是该 junction 的进程启动问题。启动“c:\\Users\\Cheese\\Documents”时会出现同样的错误吗?
  • 您是否尝试在您的用户配置文件中找到该文件夹​​?
  • 解决方案的简单程度几乎是可悲的。使用“文档”而不是“我的文档”有效。
  • 我添加了一个答案,因为我的评论是正确的。

标签: c# .net windows-7 process directory


【解决方案1】:

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

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

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

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

【讨论】:

  • 在我上面的代码中,这是(特殊文件夹)“cmd”能够在没有指定任何路径的情况下启动的原因吗?我什至没有文件名中的扩展名。
  • cmd.exe 是命令外壳解释器,位于系统 PATH 环境变量中包含的文件夹中。因此,操作系统会检查 PATH 中的每个文件夹,以搜索以 CMD 开头的程序(bat、cmd、com 或 exe)。如果您尝试使用“记事本”,它会是一样的。
【解决方案2】:

如评论,

在 Windows 7 下,“我的文档”是指向“文档”的交汇点链接,尝试在交汇点上启动进程将失败并出现此错误。改为启动“c:\Users\Cheese\Documents”。

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 它在技术上确实存在,只是它是一个连接点,当您尝试将其作为进程启动时它会失败。
    • 我不这么认为。至少 dir 不会显示类似的内容。并且 junction sysinternals 命令在那里也找不到任何连接。但是,如果您在“我的文档”下方导航并右键单击“我的文档”中的文件,您将看到该路径确实是 ..\Documents\... Windows 7 不会创建“我的文档”连接,但资源管理器本身确实显示了一个已翻译的文件夹用户的名称。在我的德国机器上,它被称为“Eigene Dokumente”,那里肯定没有这样的文件夹。
    • en.wikipedia.org/wiki/Special_folder - 此链接显示“我的文档”的特殊文件夹位置的 %USERPROFILE%\Documents。然后它在底部有一个表格,显示虚拟文件夹。 “我的文档”也作为虚拟文件夹存在。 “用户的我的文档文件夹的虚拟文件夹;用作桌面虚拟文件夹的子文件夹” 我对特殊文件夹和虚拟文件夹的作用有一个不错的了解,但我不太了解我的文档两者都可以。
    • @AloisKraus 在命令提示符下,更改为 c:\users\ 并键入“dir /a My*”。您会看到它将我的文档列为一个联结。
    • @Cheese 我的文档不是两者兼而有之。有两个“我的文档”,一个是特殊文件夹,一个是虚拟文件夹。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多