2016-03-12 6 views
1

Я не очень опытный программист и новый на 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?

+1

Удалите попытку/уловку из своего кода и повторите попытку, чтобы вы могли правильно документировать вашу проблему. –

+0

Я попробую, но моя проблема в том, что я не могу запустить отладчик в среде Citrix, поэтому я занимаюсь с сообщениями atm. В любом случае, я уверен, что код разбивается на эту строку, поскольку любой почтовый ящик до него срабатывает, но после этого нет. Вопрос был больше, если был другой способ получить цель ярлыка, хотя? – Nathan

+0

Без попытки/улова приложение просто падает, когда оно попадает на ярлык, который нужно проверить с помощью этого кода. Поскольку у меня нет доступа к отладчику в Citrix, это все, к чему я к сожалению:/ – Nathan

ответ

0

Я не знаю, что вызвало проблему с Shell32.Shell() специально в среде Citrix, но я нашел другой способ, который работает для меня. Ответ был предоставлен пользователем djdanlib здесь:. https://stackoverflow.com/a/8661371/5992820

«Добавить IWshRuntimeLibrary в качестве ссылки на ваш проект Add Reference, вкладку COM, Windows Scripting Host Object Model Вот как я получаю свойства ярлыка.:

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

ярлык объекта "СБН" имеет свойство TargetPath «.