3

我不是一个非常有经验的程序员和 C# 新手,我在使用 shell32.shell() 获取快捷方式的目标时遇到了一些问题。我在 stackoverflow 上找到了代码——它在普通的 Windows PC 上运行良好,但是当在 Citrix 虚拟化 Windows 桌面(我需要它运行的地方)上执行时,它会中断。

代码通过 foreach 循环通过文件夹中的快捷方式运行,并过滤掉任何具有可执行目标的内容。问题是,为了找到快捷方式的目标,我使用下面的代码,一旦它被称为 foreach 就会中断并且不再继续(在 Citrix 上)。

我已经确定中断发生在“var shl = new Shell32.Shell();”行,该行之后的代码不会触发并退出 foreach(但在 foreach 之后继续执行代码)。

public static string GetLnkTarget(string lnkPath)
{
    var shl = new Shell32.Shell();
    lnkPath = System.IO.Path.GetFullPath(lnkPath);
    var dir = shl.NameSpace(System.IO.Path.GetDirectoryName(lnkPath));
    var itm = dir.Items().Item(System.IO.Path.GetFileName(lnkPath));
    var lnk = (Shell32.ShellLinkObject)itm.GetLink;
    return lnk.Target.Path;
}

有谁知道另一种方法来查找可在 Citrix 虚拟化环境中工作的快捷方式的目标?

4

1 回答 1

0

我不知道是什么原因导致 Shell32.Shell() 特别是在 Citrix 环境中出现问题,但我找到了另一种适合我的方法。答案由用户djdanlib提供:https ://stackoverflow.com/a/8661371/5992820

“添加 IWshRuntimeLibrary 作为对项目的引用。添加引用、COM 选项卡、Windows 脚本宿主对象模型。这是我获取快捷方式属性的方法:

IWshRuntimeLibrary.IWshShell wsh = new IWshRuntimeLibrary.WshShellClass();
IWshRuntimeLibrary.IWshShortcut sc = (IWshRuntimeLibrary.IWshShortcut)wsh.CreateShortcut(filename);

快捷方式对象“sc”具有 TargetPath 属性。

于 2016-03-14T11:10:50.217 回答