是否有可能使用PHP创建Windows快捷方式?

问题描述:

我正在编写一个脚本来整理一堆散布在我的硬盘上的媒体,到目前为止,在家里(在我的Mac上),我在目录中使用符号链接给人的印象是一切都是有组织的在一个位置,而实际数据分布在4个驱动器上。是否有可能使用PHP创建Windows快捷方式?

不幸的是,我必须在工作中使用Windows,当然在PHP 5.3之前没有符号链接支持(我认为这需要Vista,因为这是命令行工具“mklink”首次出现时)。

作为解决方法,我考虑创建一个快捷方式,但我找不到一种方法。有没有可能,还是有更好的解决方案,我没有考虑?

由于上面的回答,我发现你的确可以从PHP调用COM,这里是我的一个符号()的替代的第一稿:

if (! function_exists('symlink')) { 
    function symlink($target, $link) { 
     if (! substr($link, -4, '.lnk')) 
      $link .= '.lnk'; 

     $shell = new COM('WScript.Shell'); 
     $shortcut = $shell->createshortcut($link); 
     $shortcut->targetpath = $target; 
     $shortcut->save(); 
    } 
} 
+0

你有没有考虑使用LINKD命令? – codeape 2009-04-27 11:16:03

在Vista之前,支持联结点(类似于UNIX符号链接)。

您需要windows资源工具包中的linkd工具(免费下载)。

快捷方式只是文件。您可以使用COM WScript API创建快捷方式文件。示例代码使用Python执行此操作。如果有一个可以让你进行COM互操作的PHP库,你应该可以做类似的事情。

import win32com.client 
import winshell 

userDesktop = winshell.desktop() 
shell = win32com.client.Dispatch('WScript.Shell') 

shortcut = shell.CreateShortCut(userDesktop + '\\Zimbra Webmail.lnk') 
shortcut.Targetpath = r'C:\Program Files\Mozilla Firefox\firefox.exe' 
shortcut.Arguments = 'http://mysite.com/auth/preauth.php' 
shortcut.WorkingDirectory = r'C:\Program Files\Mozilla Firefox' 
shortcut.save() 

为了记录在案,结点上的NTFS确实只用于目录。我不得不使用linkd.exe创建一个虚拟文件系统巨大的成功,但也有几件事情需要注意的:

  • 不能卷之间的链接(即试图在C创建一个链接:它指向D:中的某个位置将不起作用)
  • 取消链接似乎会偶尔删除目标上的数据。在删除链接之前备份/移动数据!
  • 当通过网络共享数据作为挂载卷时,连接点会遇到同样的问题 - 有时它们无法远程工作。无论您如何配置目标链接,它们似乎都随机(有时)从源文件夹继承一些共享权限。

干杯有关创建的.lnk文件有用的帖子,只有我是什么后...