2016-12-13 7 views
0

Я пытаюсь изменить аргументы ярлыка, .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.

+0

Является ли виртуализация проблемой? –

+0

Как вы это понимаете? Я работаю на физическом компьютере, нет виртуальных машин. – clzola

+0

UAC вызывает виртуализацию. Если вы попытаетесь написать администратору только ключ/файл, он перенаправляется в другое место, поэтому ваша программа думает, что это сработало (но оно работало где-то в другом месте, где вы думаете). При запуске в качестве администратора этого не происходит. Чтобы сообщить об открытии столбца «Виртуализация» на вкладке «Детализация» диспетчера задач (щелкните заголовки столбцов правой кнопки мыши на Win 10 - в более ранних версиях «Вкладка« Вкладка »и« Вид »). –

ответ

2

Использование

Set oShellLink = WshShell.CreateShortcut(objFile.Name) 

создает/модифицирует ярлыки в текущем рабочем каталоге, так что вы в основном создавать новые ярлыки в другом месте, а не модификации существующих из них.

Изменить это:

Set oShellLink = WshShell.CreateShortcut(objFile.Name)

в этом:

Set oShellLink = WshShell.CreateShortcut(objFile.Path)

и проблема исчезнет.

+0

Вот именно, я только что понял, что: D – clzola

 Смежные вопросы

  • Нет связанных вопросов^_^