Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Possuo uma aplicação em C# que precisa pegar para onde o atalho de um X programa aponta.
Ele funciona muito bem, até que seja selecionado um tipo de atalho especifico.
O codigo que uso para retornar o atalho é este:
public Shell32.Folder GetShell32NameSpaceFolder(Object folder)
{
Type shellAppType = Type.GetTypeFromProgID("Shell.Application");
Object shell = Activator.CreateInstance(shellAppType);
return (Shell32.Folder)shellAppType.InvokeMember("NameSpace",
System.Reflection.BindingFlags.InvokeMethod, null, shell, new object[] { folder });
}
public string[] GetShortcutDestination(string shortcutFilename)
{
string[] ret;
string pathOnly = Path.GetDirectoryName(shortcutFilename);
string filenameOnly = Path.GetFileName(shortcutFilename);
Shell32.Folder folder = GetShell32NameSpaceFolder(pathOnly);
Shell32.FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null)
{
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
ret = new string[] { link.Path, link.Arguments, link.WorkingDirectory };
}
else ret = new string[] { };
return ret;
}
Chamo a função GetShortcutDestination() passando o caminho do atalho. Me retorna o local do .exe, os argumentos e o local de execução.
Segue um print de um .lnk padrão e do que a função exibi:
Agora as propriedades de um .lnk e de oque a função exibi dele:
Esse caminho exibido até existe, porém este não é o caminho real do aplicativo. Se tenho executar esse .lnk pelo ProccessInfo, ele diz que o diretório não foi encontrado.
Alguem tem uma sugestão de como corrigir essa função para que ela funcione com esse "Outro tipo de atalho"??
Carregando comentários...