Я не очень опытный программист и новый на C#, и у меня возникают некоторые проблемы с получением ярлыка с использованием shell32.shell(). Я нашел код здесь на stackoverflow - и он прекрасно работает на обычных ПК с Windows, но когда он выполняется на виртуализированном рабочем столе Windows Citrix (где мне нужно его запустить), он ломается.C# .NET 4.5 Получение ярлыка без shell32.shell()
Код запускается через ярлыки в папке через цикл 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?
Удалите попытку/уловку из своего кода и повторите попытку, чтобы вы могли правильно документировать вашу проблему. –
Я попробую, но моя проблема в том, что я не могу запустить отладчик в среде Citrix, поэтому я занимаюсь с сообщениями atm. В любом случае, я уверен, что код разбивается на эту строку, поскольку любой почтовый ящик до него срабатывает, но после этого нет. Вопрос был больше, если был другой способ получить цель ярлыка, хотя? – Nathan
Без попытки/улова приложение просто падает, когда оно попадает на ярлык, который нужно проверить с помощью этого кода. Поскольку у меня нет доступа к отладчику в Citrix, это все, к чему я к сожалению:/ – Nathan