Команду Создать ярлык усекает имена папок исходный путь до восьми символов

Переводы статьи Переводы статьи
Код статьи: 263324 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Проблема

При создании ярлыков и указать длинное имя файла в пути, пути усекается, если жесткий диск для целевого объекта не существует. Например создайте ярлык с следующие цели:

J:\Mydirectory\Myapplication.exe

Если нет диска J путь сокращается до:

J:\Mydirect\Mypplica.exe

Причина

Такое поведение наблюдается, поскольку оболочка не может определить, поддерживает ли длинные имена файлов на жестком диске, путь сокращается до приемлемо для всех файловых систем.

Статус

Данное поведение является подтвержденной ошибкой продуктов Майкрософт, перечисленных в начале данной статьи..

Дополнительная информация

Эта проблема может учитываться при использовании любого из следующих методов для создания ярлыков:
  • Создания установщика Windows Server (SMS) системы управления метод ярлык
  • VBScript создать ярлык метода
  • Метод интерфейса IShellLink

Установщиком SMS создать ярлык метода


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 asubstcommand 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 "The IShellLink Interface Method") 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("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
				
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

Примечание.: 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 "_".

To work around this problem, you can use thesubstcommand to point drive J to a local hard disk:
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)
				
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("X:\\azertyuiop\\azertyuiop.exe");
				
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.

Свойства

Код статьи: 263324 - Последний отзыв: 19 ноября 2010 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows NT Workstation 4.0 Developer Edition
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional
Ключевые слова: 
kbnofix kbprb kbsms200presp3 kbui kbmt KB263324 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:263324

Отправить отзыв

 

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