C#获取开始菜单文件列表遇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
相关产品推荐
相关产品推荐

