Les raccourcis Windows prennent-ils en charge des longueurs d’argument très longues?

J’essaie de créer un raccourci (sur le bureau) qui contient une longue chaîne d’arguments (> MAX_PATH).

La documentation MSDN indique clairement que pour la chaîne Unicode, la chaîne peut être plus longue que MAX_PATH.

Le raccourci résultant est coupé exactement après les caractères MAX_PATH (c’est-à-dire le Path + les Arguments ).

Y at-il quelque chose qui ne va pas avec mon implémentation ou est-ce une limitation de Windows?

 procedure CreateShortcut(APath: WideSsortingng; AWorkingDirectory: WideSsortingng; AArguments: WideSsortingng; ADescription: WideSsortingng; ALinkFileName: WideSsortingng); var IObject : IUnknown; ISLink : IShellLinkW; IPFile : IPersistFile; begin IObject := CreateComObject(CLSID_ShellLink); ISLink := IObject as IShellLinkW; ISLink.SetPath( PWideChar(APath)); ISLink.SetWorkingDirectory(PWideChar(AWorkingDirectory)); ISLink.SetArguments( PWideChar(AArguments)); ISLink.SetDescription( PWideChar(ADescription)); IPFile := IObject as IPersistFile; IPFile.Save(PWideChar(ALinkFileName), False); end; 

PS: OS est Windows XP (et supérieur).

Il se trouve que ce problème est en fait uniquement une limitation dans la boîte de dialog du shell Explorer. Le fichier de raccourci généré n’a pas de limitation de 260 caractères. C’est simplement que la boîte de dialog refuse d’afficher une cible avec plus de caractères que cela. Vraisemblablement, il appelle GetPath avec un tampon de longueur fixe.

 procedure TForm11.Button1Click(Sender: TObject); var sl: IShellLinkW; pf: IPersistFile; begin CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IID_IShellLinkW, sl); sl.SetPath('c:\desktop\test.bat'); sl.SetWorkingDirectory('c:\desktop\'); sl.SetArguments(PChar(SsortingngOfChar('x', 300)+'_the_end')); pf := sl as IPersistFile; pf.Save('c:\desktop\test.lnk', False); end; 

Mon test.bat ressemble à ceci:

 echo %1> test.out 

Le test.out résultant.out va droit au _the_end!

Merci à tous ceux qui ont consortingbué à ce sujet – cela m’a énormément aidé.

Cependant, si vous le permettez, j’aimerais append les informations ci-dessous que j’ai découvertes lors de l’élaboration de ma solution:

1) Sur Windows 7 Enterprise ~ SP1, il semblerait que l’utilisation de VBS pour créer le raccourci limite toujours le nombre maximum de caractères dans le champ arguments. J’ai testé jusqu’à 1023 caractères avant la trunication. Je suppose que la même limite s’appliquerait également à la méthode Delphi.

2) Sous Windows XP Professionnel ~ SP3, alors que la méthode VBS créera un raccourci de plus de 260 caractères (le fichier lnk contient les données), il semble le truncher à peu près à ce numéro lors de son exécution.