Проект ищет несколько ярлыков, чтобы найти их путь. Он также создает ярлыки.C# Как создать ярлык и получить путь к существующему ярлыку (лучшая практика)
После прочтения многих сообщений, кажется, существует несколько способов приблизиться к этому, некоторые из них используют ссылку на: COM -> Модель объекта сценария Windows Script, а некоторые - нет. Не стоит ли использовать параметры, требующие добавления этой ссылки?
Я разместил сообщение, в котором показано, как использовать старый код VB, чтобы создать ярлык и выложить ниже, в случае, если он помогает кому-либо и спрашивает, так ли это как-то меньше стресса по сравнению с использованием ссылки на:
string[] myLines = {"set WshShell = WScript.CreateObject(\"WScript.Shell\")",
"strDesktop = \"" + destinationDir + "\"",
"set oShellLink = WshShell.CreateShortcut(\"" + path2shortcut + "\")"
"oShellLink.TargetPath = \"" + targetPath + "\"",
"oShellLink.WindowStyle = 1",
"oShellLink.HotKey = \"CTRL+SHIFT+F\"",
"oShellLink.IconLocation = \"notepad.exe, 0\"",
"oShellLink.WorkingDirectory = strDesktop",
"oShellLink.Save()" };
System.IO.File.WriteAllLines("test.vbs", myLines);
System.Diagnostics.Process P = System.Diagnostics.Process.Start("test.vbs");
P.WaitForExit(int.MaxValue);
System.IO.File.Delete("test.vbs");
Поскольку выше не требует Add Reference, Windows Script Host Object Model, мне интересно, если его лучше для производительности использовать способ, чтобы получить путь ярлыка, в который также не требует Ссылка на Windows, Модель объекта хоста сценария.
Ниже приведены 2 способа поиска путей поиска.
вариант 1) использует Ссылка на COM -> Установка Windows Script Host Object Model ..
WshShell shell = new WshShell();
link = (IWshShortcut)shell.CreateShortcut(linkPathName);
MessageBox.Show(link.TargetPath);
вариант 2) Не используйте Reference, он использует FileStream, пользователь по имени Блезу показывает, как сделать без добавления Ссылка [Вот ссылка- https://blez.wordpress.com/2013/02/18/get-file-shortcuts-target-with-c/]
FileStream fileStream = File.Open(file, FileMode.Open, FileAccess.Read)
using (System.IO.BinaryReader fileReader = new BinaryReader(fileStream))
{
fileStream.Seek(0x14, SeekOrigin.Begin); // Seek to flags
uint flags = fileReader.ReadUInt32(); // Read flags
// ... code continues for another 15 lines
}
ли один из этих вариантов лучше для производительности, если итерация много ярлыков (около 100), в то время? Я не уверен в том, что это налагает нагрузку, поэтому я подумал, что было бы разумно использовать «использование» заявления? (возможно, это невозможно или «перехитрить»). Я пробовал много способов и не нашел способ сделать это. Я даже попытался обратиться к DLL напрямую с помощью: '[System.Runtime.InteropServices.DllImport ("shell32.dll")]' и до сих пор не повезло.
Так что я прошу вашу помощь, чтобы найти наилучшую производительность для создания ярлыков & Поиск путей быстрого доступа.
Любой вход приветствуется. Я попытался сделать простой и конкретный, насколько это возможно. Я ценю вашу помощь!
Отлично! Спасибо за информацию, знаете ли вы о каких-либо проблемах с производительностью при использовании ссылки на Shell32? (который, по моему мнению, доступен только с помощью ссылки «Добавить ссылку на объектную модель хоста Windows Script») – Budapest