2016-12-13 95 views
0

我正在嘗試更改快捷方式,.LNK文件的參數。我有這個代碼:無法使用VBScript修改.LNK文件

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.lnkTest - 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三次,三個消息框彈出說「-m你好」,意思是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

相關問題