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

时间:2009-04-27 10:00:10

标签: php windows

我正在编写一个脚本来整理遍布我的硬盘的一堆媒体,到目前为止在家里(在我的Mac上)它运行得非常好,因为我在目录中使用符号链接给人的印象是一切都是组织在一个位置,而实际数据分布在4个驱动器上。

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

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

3 个答案:

答案 0 :(得分:7)

感谢上面的回答,我发现你确实可以从php调用COM,这是我的第一个symlink()替换草案:

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();
    }
}

答案 1 :(得分:2)

在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()

答案 2 :(得分:0)

对于记录,NTFS上的连接点确实仅用于目录。我使用linkd.exe创建虚拟文件系统取得了巨大成功,但有几点需要注意:

  • 您无法在卷之间建立链接(即尝试在C中创建指向D:中的位置的链接:不起作用)
  • 取消关联事物似乎偶尔会删除目的地的数据。在删除链接之前备份/移动数据!
  • 当通过网络共享数据作为已安装的卷时,连接点会遇到相同的问题 - 有时它们根本无法远程工作。无论您如何配置目标链接,它们似乎也随机(即有时)从源文件夹继承了一些共享权限。

为有关创建.lnk文件的有用帖子干杯,就像我之后...