Вопрос Как заставить сетап делать симлинки ?

EvilAlex

Старожил
Всем доброго времени суток !
Решил вспомнить старые добрые времена и поиграть в танки, скачал мод-пак, установил, начал настраивать под себя... и обнаружил файлы с таким типом "SYMLINK"...

Как сделать также, чтобы сетапник не копировал из папки в папку файлы и тем самым увеличивал размер клиента, а создавал такие же "SYMLINK'и" ?
ScreenShot_20150915151438.png

Как копирую я:
Код:
[Files]
Source: "{app}\res\audio\*"; DestDir: "{app}\res_mods\{#MyAppVer}\audio\"; Flags: external recursesubdirs skipifsourcedoesntexist;
Заранее спасибо!
 

ExPlayer

Старожил
Почитал тут про symlink, если я правильно понял, то можно создать .bat файл, в котором прописать нужные файлы, а затем через [run] его выполнить (это при условии, что я правильно понял про принадлежность символических ссылок :)):
Код:
MKLINK [[/D] | [/H] | [/J]] Ссылка Назначение

        /D          Создание символической ссылки на каталог.
                    По умолчанию создается символическая ссылка на файл.
        /H          Создание жесткой связи вместо символической ссылки.
        /J          Создание соединения для каталога.
        Ссылка      Имя новой символической ссылки.
        Назначение  Путь (относительный или абсолютный), на который ссылается
                    новая ссылка.
Т.е. батник будет выглядеть примерно так (если я правильно понял):
Код:
@echo off
mklink /D ambient.fev res_mods\0.9.10\audio\ambient.fev
exit
 

EvilAlex

Старожил
Ну мне нужно чтобы у файлов в папке "клиент\res\audio\" появились металинки на них в папке "клиент\res_mods\0.9.10\audio\", как на скриншоте)

Создал батник, запускаю проверить, создает папку с названием ambient.fev в которую не зайти, не запустить, куда ложить батник ?
 

ExPlayer

Старожил
Ну мне нужно чтобы у файлов в папке "клиент\res\audio\" появились металинки на них в папке "клиент\res_mods\0.9.10\audio\", как на скриншоте)

Создал батник, запускаю проверить, создает папку с названием ambient.fev в которую не зайти, не запустить, куда ложить батник ?
Так-с, батник кидаем и запускаем в "клиент\res_mods\0.9.10\audio\", код батника:
Код:
@echo off
mklink ambient.fev res\audio\ambient.fev
exit
и строку mklink придется повторить для каждого файла, как прописать все файлы, я не знаю :(
 

EvilAlex

Старожил
Все супер, работает сделал вот так
Код:
[Run]
Filename: {cmd}; Parameters: "/c ""mklink ""{app}\res_mods\0.9.10\audio\ambient.fev"" ""{app}\res\audio\ambient.fev"" "" ";
Но у меня вопрос, как то можно сделать чтобы он не каждый делал, а несколько разом, там 350 файлов, и если так каждый делать cmd сума сойдет мне кажеться....
 

Snoopak96

Старожил
Код:
[code]
#define A = (Defined UNICODE) ? "W" : "A"

function CreateSymbolicLink(lpFileName, lpExistingFileName: String; dwFlags: Integer): Boolean; external 'CreateSymbolicLink{#A}@kernel32.dll stdcall';
function CreateHardLink(lpFileName, lpExistingFileName: String; dwFlags: Integer): Boolean; external 'CreateHardLink{#A}@kernel32.dll stdcall';


procedure InitializeWizard;
begin
  CreateSymbolicLink(ExpandConstant('{sd}\1.mp3'),ExpandConstant('{sd}\111\1.mp3'), 0);
end;
lpFileName - путь и имя связи
lpExistingFileName - путь и имя целевого файла
dwFlags - если = 0 ссылка для файла, если = 1 ссылка для Dir

тестил на юникоде.
 
Последнее редактирование:
Сверху