gpt4 book ai didi

c# - 为什么我在通过 Shell32 读取公共(public)快捷方式时得到 E_ACCESSDENIED?

转载 作者:可可西里 更新时间:2023-11-01 14:15:43 24 4
gpt4 key购买 nike

我正在尝试读取 C# 4 应用程序中所有桌面快捷方式的目标。 Windows 桌面上的快捷方式可以来自多个位置,具体取决于快捷方式是为所有用户创建的还是仅为当前用户创建的。在这种特定情况下,我试图从公共(public)桌面读取快捷方式,例如来自 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,表示不允许读取快捷方式文件的内容。我已经在用户的私有(private)桌面 (c:\Users\username\Desktop) 上尝试了快捷方式文件并且工作正常。

所以,我的问题是:

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

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

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

好好的

-h-

最佳答案

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

是的,你可以解决这个问题 with a manifest .

关于c# - 为什么我在通过 Shell32 读取公共(public)快捷方式时得到 E_ACCESSDENIED?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2934420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com