【发布时间】:2016-03-12 12:31:47
【问题描述】:
我不是一个非常有经验的程序员,也是 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 虚拟化环境中工作的快捷方式的目标?
【问题讨论】:
-
从您的代码中删除 try/catch 并重试,以便正确记录您的问题。
-
我会尝试,但我的问题是我无法在 Citrix 环境中运行调试器,所以我正在使用消息框 atm。在任何情况下,我都相当确定代码会在该行中断,因为任何消息框在它触发之前但任何之后都不会。如果还有其他方法可以获取快捷方式目标,那么问题就更大了?
-
如果没有 try/catch,应用程序在到达需要使用该代码检查的快捷方式时只会崩溃。由于我无法访问 Citrix 中的调试器,因此很遗憾:/
-
每个 .NET 程序员最终都会发现,为 AppDomain.CurrentDomain.UnhandledException 编写事件处理程序不是可选的。你还没有完成。
-
你可以试试this answer。看起来 COM 对象不想被实例化。
标签: c# .net-4.5 citrix shortcuts shell32.dll