Como você cria um atalho de aplicativo (arquivo .lnk) em C # com argumentos de linha de comando

StackOverflow https://stackoverflow.com/questions/1501608

  •  19-09-2019
  •  | 
  •  

Pergunta

Eu escrevi um programa de sincronização de arquivos baseado simples FTP. As configurações do que podem ser armazenadas em um arquivo XML. Eu quero que os usuários sejam capazes de abrir rapidamente o programa usando várias configurações. Então eu configurar o programa para ser capaz de ler o caminho para um arquivo de configuração por meio de argumentos de linha de comando. Desta forma, atalhos podem ser criados no ambiente de trabalho com base em diferentes arquivos de configuração. Agora eu estou tentando adicionar um recurso que criará automaticamente o atalho para um arquivo específico de configuração.

Eu tentei usar o exemplo de este post usando ShellLink.cs. E eu também tentei usar IWshRuntimeLibrary como descrito aqui . Eu sou capaz de criar o atalho, mas o "Tipo Alvo" do atalho na janela de propriedades acaba sendo em branco no novo atalho. Se eu duplo clique no atalho eu recebo uma janela de erro de janelas sobre a ter problemas em encontrar FooBar.xml no caminho fornecido. Assim, parece que ele não percebe que ele deve estar começando um aplicativo não abrir um arquivo.

Agora, se eu abrir as propriedades do novo atalho e mudar alguma coisa no campo de destino, e depois mudá-lo de volta. Por exemplo excluir o x de xml e depois é só adicioná-lo de volta. Depois clique em OK o ícone do atalho muda imediatamente para o ícone do meu aplicativo, e funciona corretamente quando clicado duas vezes.

Assim, parece que quando eu editar o atalho manualmente ele força o Windows para verificar se o tipo de destino do atalho deve ser Aplicação e muda-lo.

Assim como pode I, através de C #, criar um novo atalho com um tipo de destino de aplicativo quando o caminho de destino não termina com .exe?

Foi útil?

Solução

Você vai precisar adicionar uma referência COM para o Windows Scripting Host. AFAIK, não há nenhuma maneira .net nativa para fazer isso.

Esta amostra vai criar um atalho na área de trabalho. Ele vai iniciar o aplicativo FTP, usando o arquivo XML definido como um argumento de linha de comando. Basta alterar os valores para o que você precisa.

        WshShellClass wsh = new WshShellClass();
        IWshRuntimeLibrary.IWshShortcut shortcut = wsh.CreateShortcut(
            Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\shorcut.lnk") as IWshRuntimeLibrary.IWshShortcut;
        shortcut.Arguments = "c:\\app\\settings1.xml";
        shortcut.TargetPath = "c:\\app\\myftp.exe";
        // not sure about what this is for
        shortcut.WindowStyle = 1; 
        shortcut.Description = "my shortcut description";
        shortcut.WorkingDirectory = "c:\\app";
        shortcut.IconLocation = "specify icon location";
        shortcut.Save();

Com esse código, o tipo de destino está devidamente preenchidos conforme aplicação e irá iniciar o aplicativo com settings1.xml como um argumento de linha de comando. Da sua pergunta, eu acho que isso é o que você está tentando fazer. No entanto, eu não acho que você pode criar um atalho para, digamos que apenas um arquivo xml, e tem o conjunto de tipo de destino como aplicação.

Para .Net 4.0 e acima, substitua a primeira linha com os seguintes (graças a Millie Smith!):

        WshShell wsh = new WshShell();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top