anchor.diff:    NewLoc := StringReplace(FileName, FSourceDir, FTargetDir, []);
     NewF := StringReplace(FileName, FSourceDir, '', []);
     WriteLn('  ',newf);
  +  if FCopyAsHardlinks then begin
  +    if pfnCreateHardLinkW(PWideChar(UnicodeString(NewLoc)), PWideChar(UnicodeString(FileName)), nil) then
  +      exit
  +    else
  +      FCopyAsHardlinks:= false;
  +  end;
     if not CopyFile(FileName, NewLoc, FFlags) then
       Inc(FCopyFailedCount);
   end;
  
positive.code:   FTargetDir: string;
    FFlags: TCopyFileFlags;
    FCopyFailedCount: integer;
  protected
    procedure DoFileFound; override;
    procedure DoDirectoryFound; override;
  
negative.code:     Searcher.FCopyFailedCount := 0;
      Searcher.FSourceDir := LazFileUtils.TrimFilename(SetDirSeparators(SourceDir));
      Searcher.FTargetDir := LazFileUtils.TrimFilename(SetDirSeparators(TargetDir));
      Searcher.FCopyAsHardlinks:= Assigned(pfnCreateHardLinkW);
  
      // Don't even try to copy to a subdirectory of SourceDir.
      B := TryCreateRelativePath(LazFileUtils.ExpandFilenameUtf8(Searcher.FSourceDir),
  