Как создать ярлык приложения (файл .lnk) в C # с аргументами командной строки - PullRequest
1 голос
/ 01 октября 2009

Я написал простую программу синхронизации файлов на основе FTP. Настройки которых можно сохранить в файле XML. Я хочу, чтобы пользователи могли быстро открывать программу, используя различные конфигурации. Поэтому я настроил программу, чтобы она могла читать путь к файлу конфигурации через аргумент командной строки. Таким образом, ярлыки могут быть созданы на рабочем столе на основе различных файлов конфигурации. Сейчас я пытаюсь добавить функцию, которая будет автоматически создавать ярлык для определенного файла конфигурации.

Я пытался использовать пример из этого поста , используя ShellLink.cs. И я также попытался использовать IWshRuntimeLibrary, как описано здесь . Я могу создать ярлык, но «Тип цели» ярлыка в окне свойств заканчивается пустым в новом ярлыке. Если дважды щелкнуть ярлык, я получаю окно с ошибкой из-за проблем с поиском FooBar.xml по указанному пути. Похоже, он не понимает, что должен запускать приложение, а не открывать файл.

Теперь, если я открою свойства нового ярлыка и изменим что-то в целевом поле, а затем вернусь обратно. Например, удалите x из xml, а затем просто добавьте его обратно. После нажатия OK значок ярлыка сразу переключается на значок моего приложения и работает правильно при двойном щелчке.

Похоже, что когда я редактирую ярлык вручную, он заставляет Windows проверять, должен ли ярлык назначаться целевым типом приложения, и переключает его.

Так как же с помощью C # создать новый ярлык с целевым типом приложения, если целевой путь не заканчивается на .exe?

1 Ответ

18 голосов
/ 01 октября 2009

Вам нужно добавить ссылку на COM на Windows Scripting Host. AFAIK, нет родного .net способа сделать это.

Этот образец создаст ярлык на рабочем столе. Он запустит приложение FTP, используя файл XML, заданный в качестве аргумента командной строки. Просто измените значения на то, что вам нужно.

        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();

С этим кодом целевой тип правильно заполняется как приложение и запустит приложение с settings1.xml в качестве аргумента командной строки. От твоего вопроса, я думаю, это то, что ты пытаешься сделать. Тем не менее, я не думаю, что вы можете создать ярлык для, скажем, просто XML-файла, и иметь тип цели, установленный в качестве приложения.

Для .Net 4.0 и выше замените первую строку следующим (спасибо Милли Смит!):

        WshShell wsh = new WshShell();
...