shell32を介してパブリックショートカットを読むときに、なぜe_accessdeniedを取得するのですか?
質問
C#4アプリケーションですべてのデスクトップショートカットのターゲットを読み込もうとしています。 Windowsデスクトップのショートカットは、すべてのユーザーに対してショートカットが作成されているか、現在のユーザーのみで作成されているかどうかに応じて、より多くの場所から来る可能性があります。この特定のケースでは、パブリックデスクトップからショートカットを読み取ろうとしています。たとえば、C: users public desktop shortcut.lnkからです。
コードはこのようなものです(パスは、LNKファイルへのパスを含む文字列です):
var shell = new Shell32.ShellClass();
var folder = shell.NameSpace(Path.GetDirectoryName(path));
var folderItem = folder.ParseName(Path.GetFileName(path));
if (folderItem != null)
{
var link = (Shell32.ShellLinkObject)folderItem.GetLink;
最後の行はSystem.UnauthorizedAccesSexceptionをスローし、ショートカットファイルの内容を読み取ることが許可されていないことを示します。ユーザーのプライベートデスクトップ(C: users username desktop)のショートカットファイルを試してみましたが、それは正常に動作します。
だから、私の質問は次のとおりです。
(1)コンテンツをユーザーとして明確に読むことができるのに、なぜ私のアプリケーションはコードからのショートカットを許可されないのですか?
(2)これを回避する方法はありますか?多分アプリケーションに特別なマニフェストファイルを使用していますか?
ところで、私のOSはWindows 7、64ビットです。
よくなって
-H-
解決
はい、デフォルトでは、そのフォルダー内の.lnkファイルにアクセスすることはできません。 .lnkプロパティを変更できるcomオブジェクトを作成しています。また、UACがオフになった管理者レベルのアカウントが必要です。
はい、あなたはそれを修正することができます マニフェストで.