我正在尝试阅读C#4应用程序中所有桌面快捷方式的目标。 Windows桌面上的快捷方式可能来自一个位置,具体取决于是为所有用户还是仅仅是当前用户创建的快捷方式。在这种特定情况下,我试图从公共桌面上阅读快捷方式,例如c: users public desktop shrotcut.lnk。

代码是这样的(路径是一个字符串,contan contan to 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;

最后一行抛出一个系统。unauthorizedAccessexception,表明不允许读取快捷键文件的内容。我尝试在用户的私人桌面上使用快捷键文件(C: Users username Desktop),这很好。

所以,我的问题是:

(1)当我可以清楚地以用户的方式阅读内容时,为什么我的应用程序不允许 /读取 /读取 /读取快捷方式?

(2)有没有办法解决这个问题?也许为应用程序使用特殊的清单文件?

而且,顺便说一句,我的操作系统是Windows 7,64位。

-H-

有帮助吗?

解决方案

是的,默认情况下,您无法访问该文件夹中的.lnk文件。您正在创建一个com对象,使您可以修改.lnk属性。这需要一个管理员级帐户,并关闭UAC。

是的,你可以解决这个问题 带有清单.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top