Я создал своего рода программу быстрого доступа для быстрого доступа к сторонним программам/программному обеспечению и папкам на моем компьютере. Программа работает хорошо, но на днях несколько программ были обновлены компанией-разработчиком программного обеспечения, и это вызвало исключения в моей программе, потому что пути были изменены на новую обновленную версию их программного обеспечения.
Чтобы отобразить значок каждой программы, я извлекаю значок из пути к файлу исполняемого файла сторонней программы/программного обеспечения. Но некоторые программы содержат информацию о версии или дате «в пути», из-за чего возникают исключения (см. следующий список). Это также вызывает исключения при запуске программ, потому что я использую путь exec для запуска каждой программы. Итак, когда компания-разработчик программного обеспечения обновляет свое программное обеспечение, информация о версии или дате в пути изменяется и выдает исключение, потому что путь изменился, и моя программа больше не может найти правильный путь ни для извлечения значка, ни для запуска программы?
В настоящее время я думаю об использовании значков в My.Resources в качестве обходного пути для проблемы извлечения значков. Но это не разрешает пути exec, которые я использую для запуска программ? Кто-нибудь знает способ обновить информацию о пути при выпуске новых версий программы? Я был бы очень признателен за помощь в этом, потому что я никогда не сталкивался с этой проблемой раньше и, честно говоря, не знаю, с чего начать, чтобы решить эту проблему?
Моя программа загружает пути к файлам для каждого стороннего программного обеспечения из текстового файла в ListBox (т.е. жестко запрограммировано). Это часть проблемы. Кто-нибудь знает, как я могу кодировать, чтобы получить пути для каждой программы в режиме реального времени, чтобы получить фактические пути, чтобы они всегда обновлялись?
Связанные вопросы по SO
Когда стороннее программное обеспечение обновляется, все пути к программному обеспечению, содержащие информацию о версии (например, версия, год и т. д.), изменяются. Это предотвращает извлечение значков из жестко запрограммированных путей, которые не были обновлены. В качестве обходного пути для этой проблемы я пытаюсь научиться извлекать пути непосредственно из реестра, загружать их во время выполнения, а затем извлекать значки программного обеспечения из обновленных путей. Пожалуйста, смотрите мой вопрос по следующей ссылке, которая, надеюсь, объясняет больше того, чего я пытаюсь достичь:
Спасибо @HaoYu-MSFT, но боюсь, это не ответ на мой вопрос выше. Мне нужно обновить иконки и пути из стороннего ПО!
Привет, спасибо @HaoYu-MSFT! Эти ссылки очень помогают, так как я заинтересован в изучении любых альтернативных методов, которые я могу найти! Однако то, над чем я сейчас работаю, — это попытка извлечь пути непосредственно из реестра при запуске, чтобы свести к минимуму проблемы при извлечении значков из путей, обновленных поставщиком программного обеспечения. Я изо всех сил пытаюсь найти примеры того, как этого добиться! См.: stackoverflow.com/questions/74525347/…
Откройте Visual Studio и создайте новое приложение Visual Basic Windows Forms. Добавьте в форму следующие объекты:
Две кнопки Один вид списка Один список изображений Задайте следующие свойства для ListView:
Вид: SmallIcon SmallImageList: имя вашего списка изображений. Ваш дизайн должен выглядеть как на рисунке 1. [![введите здесь описание изображения][1]][1] Дизайн
Код:
Public Sub ExtractIcon_1()
Dim dInfo As New System.IO.DirectoryInfo("c:\")
Dim lvItem As ListViewItem
ListView2.BeginUpdate()
ListView2.Items.Clear()
Dim CurrFile As System.IO.FileInfo
For Each CurrFile In dInfo.GetFiles()
Dim iFileIcon As Icon = SystemIcons.WinLogo
lvItem = New ListViewItem(CurrFile.Name, 1)
If Not (ImageList2.Images.ContainsKey _
(CurrFile.Extension)) Then
iFileIcon = System.Drawing.Icon.ExtractAssociatedIcon _
(CurrFile.FullName)
ImageList2.Images.Add(CurrFile.Extension, iFileIcon)
End
lvItem.ImageKey = CurrFile.Extension
ListView2.Items.Add(
Next CurrFile
ListView2.EndUpdate()
End Sub
Добавьте следующую подпрограмму за первой кнопкой:
Private Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click
ExtractIcon_1()
End Sub
https://www.codeguru.com/visual-basic/extracting-icons-associated-with-files-in-visual-basic-net/
Поскольку вы сопоставили и опубликовали новый вопрос, вы можете пометить мой ответ как принятый, чтобы изменить его статус на «Отвечено». Он может предоставить решения аналогичных проблем для других. Большое спасибо!
Спасибо @Hao Yu-MSFT! Мой вопрос здесь был обновлен для удобства чтения! Я уже построил приведенный вами пример, опубликованный Hannes DuPreez, но в нем отсутствуют некоторые фрагменты кода, например. ListView2.Items.Add(??? Пожалуйста, посмотрите мой другой пост, который, возможно, объясняет, чего я пытаюсь достичь: иерархия реестра
Я пометил ваш пост как возможный ответ, но этот пример касается отображения значков (например, проводника). На самом деле я пытаюсь извлечь обновленные пути из реестра, а затем извлечь значки непосредственно из путей. Это обходной путь для упомянутой выше проблемы с путями к программному обеспечению сторонних производителей, которые включают информацию о версии при обновлении их программного обеспечения, что предотвращает извлечение значков из жестко заданного пути! Поэтому мне нужен способ обновлять пути при обновлении программного обеспечения, и если я смогу узнать, как реализовать идею реестра, я думаю, что это сработает!
Ответ на этот случай должен быть вам полезен, вы можете сослаться на него. stackoverflow.com/questions/14036634/…