2017-02-08 40 views
0

我需要从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中的联系

他们没有工作。那么我怎么才能从这个路径获取这些文件呢?

+0

你不能改变路径,并把文件放在其他文件夹。最好的办法是给予文件夹的安全权限。 –

回答

1

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

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

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); 
    } 
} 
0

你可以试试这个

串ALLUSERS = Environment.GetEnvironmentVariable( “ALLUSERSPROFILE”)+ “\开始菜单\程序”;