Windows快捷方式是否支持非常长的参数长度?

我正在尝试创build一个包含长参数string(> MAX_PATH)的快捷方式(在桌面上)。

MSDN文档明确指出,对于Unicodestring,string可能比MAX_PATH长。

生成的快捷方式在MAX_PATH字符(即Path + Arguments )后正好切割。

我的实现有什么问题,或者这是一些Windows的限制?

 procedure CreateShortcut(APath: WideString; AWorkingDirectory: WideString; AArguments: WideString; ADescription: WideString; ALinkFileName: WideString); 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是Windows XP(及以上)。

事实证明,这个问题实际上仅仅是在Explorer shell对话框中的一个限制。 生成的快捷方式文件不具有260个字符的限制。 只是对话框拒绝显示比这个更多的字符的目标。 据推测,它使用固定长度的缓冲区来调用GetPath

 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(StringOfChar('x', 300)+'_the_end')); pf := sl as IPersistFile; pf.Save('c:\desktop\test.lnk', False); end; 

我的test.bat看起来像这样:

 echo %1> test.out 

由此产生的test.out正确的方式来_the_end!

感谢所有对这个主题有所贡献的人 – 这对我非常有帮助。

但是,如果可以的话,我想添加我在制定解决方案时发现的以下信息:

1)在Windows 7 Enterprise〜SP1上,似乎使用VBS创建快捷方式仍然限制(至少)参数字段中的最大字符数。 在我被扼杀之前,我测试了1023个字符。 我想同样的限制也适用于德尔菲法。

2)在Windows XP Professional〜SP3上,当VBS方法创建一个超过260个字符的快捷方式(lnk文件包含数据)时,它似乎在执行它时大约在这个数字上。