Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Caique Portella_182805

pegar caminho do link

Recommended Posts

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:

NESF5LX.png

Agora as propriedades de um .lnk e de oque a função exibi dele:

WqFC4pr.png

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"??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que esse ink na verdade aponta pra assinatura do aplicativo dentro do sistema do Windows, tente procurar por esse ID dentro da lista de programas instalados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver utilizando este tópico: https://astoundingprogramming.wordpress.com/2012/12/17/how-to-get-the-target-of-a-windows-shortcut-c/

Ele explica a diferença entre os atalhos em questão (normal e MSI) e da exemplo de uma classe que retorna o caminho correto da aplicação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.