Microsoft KB Archive/263324

= The Create Shortcut command truncates the source path folder names to eight characters =

Article ID: 263324

Article Last Modified on 10/31/2006

-

APPLIES TO


 * Microsoft Windows 2000 Professional Edition
 * Microsoft Systems Management Server 1.0 Standard Edition
 * Microsoft Systems Management Server 2.0 Service Pack 5
 * Microsoft Windows NT Workstation 4.0 Developer Edition
 * Microsoft Windows XP Home Edition
 * Microsoft Windows XP Professional

-



This article was previously published under Q263324



SYMPTOMS
When you create shortcuts and specify a long file name in the target path, the path is truncated if the hard disk for the target does not exist. For example, create a shortcut with the following target:

J:\Mydirectory\Myapplication.exe

If drive J does not exist, the path is truncated to:

J:\Mydirect\Mypplica.exe



CAUSE
This problem can occur because the shell cannot determine whether the hard disk supports long file names, so the path is truncated to be acceptable to all file systems.



STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article.



MORE INFORMATION
This problem may be observed when you use any of the following methods to create shortcuts:
 * The Systems Management Server (SMS) Installer Create Shortcut Method
 * The VBScript Create Shortcut Method
 * The IShellLink Interface Method

The SMS Installer Create Shortcut Method
An extract from an SMS Installer .ipf file that demonstrates the problem: item: Create Shortcut Source English=X:\Pw32\Alongdirectory\Blongdirectory\Longfilename.exe Destination English=C:\Winnt\Shortcut123.lnk Key Type English=1536 Flags=00000001 end If you compile a script with this extract and you run it after you have ensured that drive X does not exist, you can observe that the shortcut is created, but the target path is truncated to:

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

If you connect drive X to a share or use a subst command to point to a local drive and you run the script again, the shortcut is created with the correct target path:

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

This problem is not caused by the SMS Installer. This problem occurs because the SMS Installer uses the IShellLink interface (refer to &quot;The IShellLink Interface Method&quot;) to create shortcuts. The SMS Installer passes the full correct path name to the IShellLink interface, but the path is truncated when the IShellLink::SetPath operation is performed.

The VBScript Create Shortcut method
A sample VBScript that demonstrates the problem: set WshShell = WScript.CreateObject(&quot;WScript.Shell&quot;) set oShellLink = WshShell.CreateShortcut(&quot;d:\&quot; & &quot;\Long filename Shortcut .lnk&quot;) oShellLink.TargetPath = &quot;j:\my long directory\myapplication.exe&quot; oShellLink.WindowStyle = 1 oShellLink.Hotkey = &quot;CTRL+SHIFT+F&quot; oShellLink.Description = &quot;Long Filename Shortcut&quot; oShellLink.Save When you run this script and drive J does not exist, you can observe the created shortcut, but the target path is:

J:\My_long_\Myapplic.exe

NOTE: Any characters that are not normally supported by file systems that do not want long file names, such as the space character, are replaced by the underscore symbol &quot;_&quot;.

To work around this problem, you can use the subst command to point drive J to a local hard disk: set WshShell = WScript.CreateObject(&quot;WScript.Shell&quot;) Dim ret 'subst a drive to make the mapping work ret = WshShell.Run (&quot;cmd /c subst j: c:\&quot;, 0, TRUE) set oShellLink = WshShell.CreateShortcut(&quot;d:\&quot; & &quot;\Long filename Shortcut .lnk&quot;) oShellLink.TargetPath = &quot;j:\my long directory\myapplication.exe&quot; oShellLink.WindowStyle = 1 oShellLink.Hotkey = &quot;CTRL+SHIFT+F&quot; oShellLink.Description = &quot;Long Filename Shortcut&quot; oShellLink.Save 'remove the subst ret = WshShell.Run (&quot;cmd /c subst j: /d&quot;, 0, TRUE) This command points drive J to drive C. If drive C supports long file names, the command creates a shortcut with the following target path:

J:\My long directory\Myapplication.exe

You can also use WshNetwork.MapNetworkDrive to connect drive J to a known share, create the shortcut as outlined in the preceding steps, and then remove drive J by using WshNetwork.RemoveNetworkDrive.

The IShellLink Interface Method
An extract of code that demonstrates the problem by using the IShellLink interface in Microsoft Visual C++: 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(&quot;X:\\azertyuiop\\azertyuiop.exe&quot;); You must use IPersistFile::Save to write the shortcut to disk. This action results in a target path of:

X:\Azertyui\Azertyui.exe

This problem occurs on all versions of Windows NT 4.0 and Windows 2000.

Keywords: kbnofix kbprb kbsms200presp3 kbui KB263324

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.