6

C#4アプリケーションのすべてのデスクトップショートカットのターゲットを読み取ろうとしています。Windowsデスクトップのショートカットは、ショートカットがすべてのユーザー用に作成されているか、現在のユーザーのみ用に作成されているかに応じて、複数の場所から取得できます。この特定のケースでは、パブリックデスクトップからショートカットを読み取ろうとしています。たとえば、C:\ Users \ Public \ Desktop\shortcut.lnkからです。

コードは次のようになります(pathは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-

4

1 に答える 1

5

はい、デフォルトではそのフォルダー内の .lnk ファイルにアクセスできません。.lnk プロパティを変更できる COM オブジェクトを作成しています。そのためには、UAC がオフになっている管理者レベルのアカウントが必要です。

はい、マニフェストで修正できます。

于 2010-05-29T12:30:27.953 に答える