如何访问“开始菜单”路径?

时间:2017-02-08 22:09:01

标签: c# wpf

我需要从C:\ProgramData\Microsoft\Windows\Start Menu\Programs及其子文件夹中获取文件。

我试图让他们这样:

string path = @"C:\ProgramData\Microsoft\Windows\Start Menu\";
string[] lnks = Directory.GetFiles(path, "*.lnk", SearchOption.AllDirectories);`

但它给了我一个错误:

An unhandled exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll Access denied to the path : 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs'

这些是我试图访问该路径的内容;

<requestedExecutionLevel  level="highestAvailable" uiAccess="false" /> to the app.manifest
代码中的

File.GetAccessControl(path);

以管理员身份启动Visual Studio

他们都没有奏效。那么如何从该路径获取这些文件呢?

2 个答案:

答案 0 :(得分:1)

该文件夹的问题是存在ReparsePoint文件夹,其名称已针对您的文化进行了本地化(例如,在我的计算机中,我有名为“Programmi”的文件夹(重新分析点)和名为“的文件夹”程序“)

尝试读取ReparsePoint文件夹时,Directory.GetFiles似乎失败了,但你可以使用这样的代码来避免它

string path = @"C:\ProgramData\Microsoft\Windows\Start Menu\";
string[] dirs = Directory.GetDirectories(path, "*", SearchOption.TopDirectoryOnly);
foreach (string s in dirs)
{
    DirectoryInfo di = new DirectoryInfo(s);
    if (!di.Attributes.HasFlag(FileAttributes.ReparsePoint)) 
    {
        string[] lnks = Directory.GetFiles(s, "*.lnk", SearchOption.AllDirectories);
    }
}

答案 1 :(得分:0)

你可以试试这个

string allUsers = Environment.GetEnvironmentVariable(&#34; ALLUSERSPROFILE&#34;)+&#34; \ Start Menu \ Programs&#34;;

相关问题