You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#获取开始菜单文件列表遇UnauthorizedAccessException问题求助

解决获取开始菜单快捷方式时的System.UnauthorizedAccessException异常

即使以管理员权限运行,使用Directory.GetFiles加SearchOption.AllDirectories遍历开始菜单时仍会触发权限异常,原因是开始菜单目录下存在系统保护的子目录(如部分系统应用目录、受限用户目录),递归遍历会直接触发全局异常中断流程。

以下是可行的解决方法:

  • 递归遍历并捕获单个目录的权限异常:放弃一次性递归遍历,改为逐个目录处理,遇到无权访问的目录直接跳过,避免全局异常中断整个流程。示例代码:
List<string> lnkFileList = new List<string>();

void SearchLnkFiles(string targetDir)
{
    try
    {
        // 收集当前目录下的所有快捷方式
        lnkFileList.AddRange(Directory.GetFiles(targetDir, "*.lnk"));
        
        // 递归遍历子目录
        foreach (string subDir in Directory.GetDirectories(targetDir))
        {
            SearchLnkFiles(subDir);
        }
    }
    catch (UnauthorizedAccessException)
    {
        // 跳过无权限访问的目录
        return;
    }
}

// 执行搜索
string startMenuPath = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu);
SearchLnkFiles(startMenuPath);
// lnkFileList 即为所有可访问的快捷方式文件路径
  • 区分用户与公共开始菜单:如果需要获取所有用户的开始菜单快捷方式,可同时遍历Environment.SpecialFolder.StartMenu(当前用户)和Environment.SpecialFolder.CommonStartMenu(所有用户公共目录),同样需要按上述方式处理权限问题。

  • 接受无法访问的目录:部分系统目录受系统权限策略严格限制,即使管理员也无法访问,这种情况下只能跳过这些目录,无法强行读取。

内容的提问来源于stack exchange,提问作者Jack251970

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:42:01