2016-12-13 5 views
0

Ich versuche, Argumente der Verknüpfung, .LNK-Datei zu ändern. Ich habe diesen Code:Kann nicht ändern. LNK-Datei mit 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 

Und ich bekomme wirklich seltsames Verhalten. Ich habe 2 Verknüpfungen auf dem Desktop mit den Namen Test.lnk und Test - Copy.lnk und eine in C:\ProgramData\Microsoft\Windows\Start Menu\Programs. Um die dritte zu ändern, muss ich Schreibrechte, so habe ich diesen Code zu Beginn meiner vbsript:

If Not WScript.Arguments.Named.Exists("elevate") Then 
    CreateObject("Shell.Application").ShellExecute WScript.FullName _ 
    , """" & WScript.ScriptFullName & """ /elevate", "", "runas", 1 
    WScript.Quit 
End If 

nun durch meine Vbscript ausgeführt wird, führt dieser Befehl Wscript.Echo shellLink.Arguments dreimal und drei Message Popup "-m Hello" zu sagen, was shellLink.Save bedeutet, wurde ohne Fehler ausgeführt. Aber keine der Link-Dateien wird geändert. Wenn ich jedoch ohne administrative Rechte arbeite, werden die beiden Link-Dateien auf dem Desktop geändert, aber die dritte nicht. Auch manchmal, aus einem unbekannten Grund kann ich nicht lesen shellLink.TargetPath Eigenschaft, die ich brauche, um herauszufinden, ist dies der richtige Link/Verknüpfung, die ich bearbeiten muss.

Meine Frage ist was mache ich falsch und gibt es andere (bessere) Möglichkeit, Argumente in .LNK (Shortcut) -Datei zu ändern? Ich sollte auch erwähnen, ich bin mit Windows 10.

+0

Ist Virtualisierung ein Problem? –

+0

Wie meinst du das? Ich laufe auf einem physischen Computer, keine virtuellen Maschinen. – clzola

+0

UAC verursacht Virtualisierung. Wenn Sie versuchen, in einen Admin-Schlüssel/eine Admin-Datei zu schreiben, wird diese an anderer Stelle umgeleitet, so dass Ihr Programm denkt, dass es funktioniert hat (aber es hat woanders funktioniert, wo Sie denken). Wenn es als Admin ausgeführt wird, passiert das nicht. Um zu sagen, aktivieren Sie die Spalte Virtualisierung auf der Registerkarte Details des Task-Managers (klicken Sie mit der rechten Maustaste auf die Spaltenüberschriften unter Win 10 - in früheren Versionen Process Tab und View-Menü). –

Antwort

2

Mit

Set oShellLink = WshShell.CreateShortcut(objFile.Name) 

erstellt/Verknüpfungen im aktuellen Arbeitsverzeichnis modifiziert, so dass Sie im Grunde neue Verknüpfungen an einem anderen Ort zu schaffen, anstatt Modifizierung der bestehenden Einsen. diese

Wechsel:

Set oShellLink = WshShell.CreateShortcut(objFile.Name)

in diese:

Set oShellLink = WshShell.CreateShortcut(objFile.Path)

und das Problem verschwindet.

+0

Das ist es, ich habe gerade gedacht, dass: D – clzola