在创建快捷方式命令将截断为八个字符将源路径文件夹名称

文章翻译 文章翻译
文章编号: 263324 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

当创建快捷方式,并在目标路径中指定的长文件名路径将被截断,如果目标硬盘不存在。与以下目标例如对于创建快捷方式,请执行下列操作:

J:\Mydirectory\Myapplication.exe

如果不存在驱动器 J,路径将被截尾取整为:

J:\Mydirect\Mypplica.exe

原因

因为外壳程序不能确定硬盘是否支持长文件名称,因此该路径将被截尾取整为是接受所有的文件系统的则可能会出现此问题。

状态

Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中的问题。

更多信息

当您使用下列方法之一创建快捷方式时,可能会出现此问题:
  • 系统管理服务器 (SMS) 安装程序创建的快捷方法
  • 在 VBScript 创建快捷方法
  • IShellLink 接口方法

SMS 安装程序创建的快捷方法


从 SMS 安装程序.ipf 文件演示了该问题的一个提取:
item: Create Shortcut
  Source English=X:\Pw32\Alongdirectory\Blongdirectory\Longfilename.exe
  Destination English=C:\Winnt\Shortcut123.lnk
  Key Type English=1536
  Flags=00000001
end
				
如果编译与此提取的脚本,并确保不存在驱动器 X 后就会运行它您可以观察创建快捷方式,但目标路径将被截尾取整为:

X:\Pw32\Alongdir\Blongdir\Longfile.exe

如果连接到共享驱动器 X,或者使其指向一个本地驱动器和您再次运行该脚本使用 subst 命令创建快捷方式与正确的目标路径:

X:\Pw32\Alongdirectory\Blongdirectory\Longfilename.exe

此问题不是由 SMS 安装程序引起的。之所以会出现此问题,因为 SMS 安装程序使用 IShellLink 接口 (请参阅"的 IShellLink 接口方法") 创建的快捷方式。SMS 安装程序将完全正确的路径名称传递给 IShellLink 接口,但当执行 IShellLink::SetPath 操作时,该路径会被截断。

VBScript 创建快捷方式方法

VBScript 演示此问题的一个示例:
set WshShell = WScript.CreateObject("WScript.Shell")
set oShellLink = WshShell.CreateShortcut("d:\" & "\Long filename Shortcut .lnk")
oShellLink.TargetPath = "j:\my long directory\myapplication.exe"
oShellLink.WindowStyle = 1
oShellLink.Hotkey = "CTRL+SHIFT+F"
oShellLink.Description = "Long Filename Shortcut"
oShellLink.Save
				
当您运行此脚本和 J 驱动器不存在,您可以观察该创建快捷方式但目标路径是:

J:\My_long_\Myapplic.exe

: 任何不想如该空间字符的长的文件名称的文件系统通常不支持的字符将替换由下划线符号"_"。

要变通解决此问题,可以使用 subst 命令,以在本地硬盘中指向驱动器 J:
set WshShell = WScript.CreateObject("WScript.Shell")
Dim ret
'subst a drive to make the mapping work
ret = WshShell.Run ("cmd /c subst j: c:\", 0, TRUE)
set oShellLink = WshShell.CreateShortcut("d:\" & "\Long filename Shortcut .lnk")
oShellLink.TargetPath = "j:\my long directory\myapplication.exe"
oShellLink.WindowStyle = 1
oShellLink.Hotkey = "CTRL+SHIFT+F"
oShellLink.Description = "Long Filename Shortcut"
oShellLink.Save
'remove the subst
ret = WshShell.Run ("cmd /c subst j: /d", 0, TRUE)
				
这个命令点驱动器 J 为驱动器 c。如果驱动器 C 支持长文件名,命令创建快捷方式目标路径如下:

J:\My 长 directory\Myapplication.exe

您可以还使用 WshNetwork.MapNetworkDrive J 驱动器连接到已知共享、 在上述步骤中所述创建快捷方式,并使用 WshNetwork.RemoveNetworkDrive 然后删除驱动器 J。

IShellLink 接口方法

通过使用 Microsoft Visual c + + 中的 IShellLink 界面演示此问题的代码的一个提取:
HRESULT hres; 

IShellLink* psl; 
 
    // Get a pointer to the IShellLink interface. 
    hres = CoCreateInstance(CLSID_ShellLink, NULL, 
        CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID *) &psl); 
    if (SUCCEEDED(hres)) { 
        IPersistFile* ppf; 
 
        // Set the path to the shortcut target and add the 
        // description. 
        hres = psl->SetPath("X:\\azertyuiop\\azertyuiop.exe");
				
必须使用 IPersistFile::Save 将快捷方式写入磁盘。此操作的结果的目标路径是:

X:\Azertyui\Azertyui.exe

在所有版本的 Windows NT 4.0 和 Windows 2000 上会出现此问题。

属性

文章编号: 263324 - 最后修改: 2006年10月31日 - 修订: 3.3
这篇文章中的信息适用于:
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Systems Management Server 1.0 Standard Edition
  • Microsoft Systems Management Server Installer 2.0
  • Microsoft Windows NT Workstation 4.0 开发员版
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional Edition
关键字:?
kbmt kbnofix kbprb kbsms200presp3 kbui KB263324 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 263324
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com