DetailPage-MSS-KB

Base de Dados de Conhecimento

Artigo: 263324 - Última revisão: terça-feira, 31 de Outubro de 2006 - Revisão: 3.3

 

Nesta página

Sintomas

Quando criar atalhos e especificar um nome de ficheiro longos no caminho de destino, o caminho é truncado se o disco rígido para o destino não existir. Por exemplo, criar um atalho com o seguinte destino:

J:\Mydirectory\Myapplication.exe

Se a unidade J não existir, o caminho será truncado para:

J:\Mydirect\Mypplica.exe

Causa

Este problema pode ocorrer porque a shell não é possível determinar se o disco rígido suporta nomes de ficheiro longos, para que o caminho é truncado para ser aceitável para todos os sistemas de ficheiros.

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo.

Mais Informação

Este problema poderá ser observado quando utiliza qualquer um dos seguintes métodos para criar atalhos:
  • O Systems Management Server (SMS) Installer Criar Método de atalho
  • O VBScript Criar método de atalho
  • O método de interface IShellLink

O Installer SMS Criar método de atalho


Um extracto de um ficheiro .IPF programa de instalação do SMS que demonstra o problema:
item: Create Shortcut
  Source English=X:\Pw32\Alongdirectory\Blongdirectory\Longfilename.exe
  Destination English=C:\Winnt\Shortcut123.lnk
  Key Type English=1536
  Flags=00000001
end
				
se compilar um script com este extracto e executar depois de garantia de que a unidade X não existe, pode observar que o atalho é criado, mas o caminho de destino é truncado para:

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

Se ligar a unidade X a uma partilha ou utilizar um comando subst para apontar para uma unidade local e volte a executar o script, o atalho é criado com o caminho de destino correcto:

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

Este problema não é causado pelo programa de instalação do SMS. Este problema ocorre porque o Installer SMS utiliza a interface IShellLink (consulte "Método de interface IShellLink A") para criar atalhos. Installer SMS transmite o nome completo correctamente o caminho para a interface IShellLink, mas o caminho é truncado quando a operação IShellLink::SetPath é executada.

O método de VBScript criar atalho

Um exemplo de VBScript que demonstra o problema:
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
				
quando executar este script e a unidade J não existe, é possível observar o atalho criado, mas o caminho de destino é:

J:\My_long_\Myapplic.exe

Nota : quaisquer caracteres que normalmente não são suportadas pelos sistemas de ficheiros não pretender que nomes de ficheiro longos, tais como o carácter de espaço são substituídos pelo símbolo de sublinhado "_".

Para contornar este problema, pode utilizar o comando subst para apontar a unidade J para um disco rígido local:
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)
				
este comando pontos unidade J a unidade C. Se a unidade C suportar nomes de ficheiro longos, o comando cria um atalho com o seguinte caminho de destino:

J:\My directory\Myapplication.exe longo

Pode também utilizar WshNetwork.MapNetworkDrive para ligar a unidade J a uma partilha conhecida, criar o atalho conforme descrito nos passos anteriores e remova a unidade J utilizando WshNetwork.RemoveNetworkDrive.

O método de interface IShellLink

Um extracto de código demonstra o problema utilizando a interface IShellLink no 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");
				
tem de utilizar IPersistFile::Save para escrever o atalho para o disco. Esta acção resulta no caminho destino:

X:\Azertyui\Azertyui.exe

Este problema ocorre em todas as versões do Windows NT 4.0 e Windows 2000.

A informação contida neste artigo aplica-se a:
  • 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 Developer Edition
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional Edition
Palavras-chave: 
kbmt kbnofix kbprb kbsms200presp3 kbui KB263324 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 263324  (http://support.microsoft.com/kb/263324/en-us/ )
Partilhar
Opções de suporte adicionais
Fóruns de Suporte da Comunidade Microsoft
Contacte-nos directamente
Encontre um parceiro certificado Microsoft
Loja Microsoft