我需要从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”的文件夹(重新分析点)和名为“的文件夹”程序“)
尝试读取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;;