2017-02-08 10 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' 

をそして、それらは私がそのパスへのアクセスを取得しようとしたものです。それらの管理

なしに働いていないとしてのVisual Studioを起動するコード

<requestedExecutionLevel level="highestAvailable" uiAccess="false" /> to the app.manifest 

File.GetAccessControl(path);。どうすればそのパスからそれらのファイルを取得できますか?

+0

ようなコードでそれを避けることができます。最善の方法は、フォルダにセキュリティ権限を与えることです。 –

答えて

1

あなたのカルチャにローカライズされた名前のReparsePointフォルダが存在します(例えば、私のマシンには "Programmi"という名前のリパルスポイントと "Programs"という名前の実際のフォルダがあります)

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")+ "\プログラム\スタートメニュー" を試すことができます。

関連する問題