Я пытаюсь изменить аргументы ярлыка, .LNK-файла. У меня есть этот код:Невозможно изменить файл .LNK с помощью VBScript
Set objFolder = fileSystem.GetFolder(folderPath)
Set colFiles = objFolder.Files
For Each objFile in colFiles
If (InStr(objFile.Name, ".lnk")) Then
Set oShellLink = WshShell.CreateShortcut(objFile.Name)
Wscript.Echo oShellLink.TargetPath
if (InStr(oShellLink.TargetPath, "test.exe")) Then
UpdateShortcut(oShellLink)
End If
End If
Next
Function UpdateShortcut(shellLink)
shellLink.Arguments = "-m Hello"
shellLink.Save
Wscript.Echo shellLink.Arguments
End Function
И я получаю действительно странное поведение. У меня есть два ярлыка на рабочем столе с именем Test.lnk
и Test - Copy.lnk
и один в C:\ProgramData\Microsoft\Windows\Start Menu\Programs
. Для того, чтобы изменить третий, мне нужны права на запись, так что у меня есть этот код в начале моего vbsript:
If Not WScript.Arguments.Named.Exists("elevate") Then
CreateObject("Shell.Application").ShellExecute WScript.FullName _
, """" & WScript.ScriptFullName & """ /elevate", "", "runas", 1
WScript.Quit
End If
Теперь, запустив свой VBScript, эта команда выполняет Wscript.Echo shellLink.Arguments
три раза, а всплывающее окно три MessageBoxes говоря «-m Hello», то есть shellLink.Save
получил исполнение без ошибок. Но ни один из файлов ссылок не изменяется. Однако, если я запускаю без административных прав, два файла ссылок на рабочем столе меняются, а третий - нет. Кроме того, по какой-то неизвестной причине я не могу прочитать свойство shellLink.TargetPath
, которое мне нужно для выяснения, это правильная ссылка/ярлык, который мне нужно отредактировать.
Мой вопрос в том, что я делаю неправильно, и есть ли другой (лучший) способ изменения аргументов в файле .LNK (ярлык)? Кроме того, я должен упомянуть, я работающий под управлением Windows 10.
Является ли виртуализация проблемой? –
Как вы это понимаете? Я работаю на физическом компьютере, нет виртуальных машин. – clzola
UAC вызывает виртуализацию. Если вы попытаетесь написать администратору только ключ/файл, он перенаправляется в другое место, поэтому ваша программа думает, что это сработало (но оно работало где-то в другом месте, где вы думаете). При запуске в качестве администратора этого не происходит. Чтобы сообщить об открытии столбца «Виртуализация» на вкладке «Детализация» диспетчера задач (щелкните заголовки столбцов правой кнопки мыши на Win 10 - в более ранних версиях «Вкладка« Вкладка »и« Вид »). –