Вот код под D7, проверено, работает
Код:
uses ShlObj, ComObj, ActiveX;
procedure SetLinkIcon(lfn, ifn: string);
var
IObject: IUnknown;
SLink: IShellLink;
PFile: IPersistFile;
begin
IObject := CreateComObject(CLSID_ShellLink);
SLink := IObject as IShellLink;
PFile := IObject as IPersistFile;
PFile.Load(PWChar(WideString(lfn)), 0);
SLink.SetIconLocation(PAnsiChar(ifn), 0);
PFile.Save(PWChar(WideString(lfn)), false);
end;
...
// пример вызова
SetLinkIcon('B.lnk', ExtractFileDir(ParamSTR(0)) + '\some.ico');