Как запускать команды после установки в автоматическом режиме с помощью установки Inno?

Я использую Inno Setup для создания установщика для своего приложения. Часть процесса установки включает установку двоичного файла Ollama и запуск пары команд для настройки моделей. Однако команды, похоже, не выполняются должным образом. Вот мой сценарий установки Inno:

[Setup]
AppName=Chat2Find
AppVersion=1.0
DefaultDirName = {pf}\Chat2Find
DefaultGroupName=Chat2Find
OutputDir=.
OutputBaseFilename=Chat2FindInstaller
Compression=lzma
SolidCompression=yes
DiskSpanning=yes

[Files]
; Include the executable
Source: "C:\Users\presh\c2f\dist\Chat2Find.exe"; DestDir: "{app}"; Flags: ignoreversion

; Include the GGUF files to be extracted to a permanent location
Source: "C:\Users\presh\c2f\dist\Mistral-7B-Instruct-v0.3.Q4_K_M.gguf"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\Phi-3-mini-4k-instruct-q4.gguf"; DestDir: "{app}"; Flags: ignoreversion

; Include the Ollama setup binary
Source: "C:\Users\presh\c2f\dist\OllamaSetup.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall

; Include other resources
Source: "C:\Users\presh\c2f\dist\menu.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\close.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\new_note.jpg"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\copy.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\send_icon.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\chat2find.jpeg"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\Chat2Find"; Filename: "{app}\Chat2Find.exe"
Name: "{commondesktop}\Chat2Find"; Filename: "{app}\Chat2Find.exe"; Tasks: desktopicon

[Tasks]
Name: "desktopicon"; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"; Flags: checkedonce

[Run]
Filename: "{app}\Chat2Find.exe"; Description: "Launch Chat2Find"; Flags: nowait postinstall skipifsilent
; Run Ollama setup silently
Filename: "{tmp}\OllamaSetup.exe"; Description: "Install Ollama"; Flags: waituntilterminated

; Run Ollama commands silently using a script
Filename: "cmd.exe"; Parameters: "/C {app}\run_ollama_commands.bat"; Flags: runhidden postinstall

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
  GGUFDir: String;
  MistralDef, Phi3Def, OllamaScript: String;
begin
  if CurStep = ssPostInstall then
  begin
    GGUFDir := ExpandConstant('{app}');
    
    if not DirExists(GGUFDir) then
    begin
      CreateDir(GGUFDir);
    end;
    
    MistralDef := GGUFDir + '\mistral_definition';
    SaveStringToFile(MistralDef,
      'FROM ' + GGUFDir + '\Mistral-7B-Instruct-v0.3-Q4_K_M.gguf' + #13#10 +
      'TEMPLATE """[INST] {{ if .System }}{{ .System }} {{ end }}{{ .Prompt }} [/INST]"""' + #13#10 +
      'PARAMETER stop "[INST]"' + #13#10 +
      'PARAMETER stop "[/INST]"', False);

    Phi3Def := GGUFDir + '\phi3_definition';
    SaveStringToFile(Phi3Def,
      'FROM ' + GGUFDir + '\Phi-3-mini-4k-instruct-q4.gguf' + #13#10 +
      'TEMPLATE """<s>{{ if .Prompt }}' + #13#10 +
      '{{ .Prompt }}' + #13#10 +
      '{{ end }}' + #13#10 +
      '{{ .Response }}"""' + #13#10 +
      'PARAMETER stop' + #13#10 +
      'PARAMETER stop' + #13#10 +
      'PARAMETER stop' + #13#10 +
      'PARAMETER num_ctx 4096', False);

    OllamaScript := GGUFDir + '\run_ollama_commands.bat';
    SaveStringToFile(OllamaScript,
      'ollama create C2F_mistral -f "' + MistralDef + '"' + #13#10 +
      'ollama create C2F_phi3 -f "' + Phi3Def + '"', False);
  end;
end;

Проблема:

Команды в run_ollama_commands.bat, похоже, не выполняются должным образом. Как я могу гарантировать, что эти команды будут выполняться автоматически после установки двоичного файла Ollama?

Дополнительный контекст:

OllamaSetup.exe правильно устанавливает двоичный файл Ollama.

Мне нужно, чтобы модели создавались с использованием файлов и шаблонов GGUF, предоставленных во время установки.

Пакетный файл (run_ollama_commands.bat) должен работать автоматически, без отображения окна командной строки.

Мы будем очень признательны за любые идеи или предложения о том, как правильно выполнять эти команды после установки!


61
1

Ответ:

Решено

Если вы используете Inno Setup и вам необходимо автоматически выполнять команды после установки, выполните следующие действия, чтобы убедиться, что все работает гладко. Вот изысканное решение:

  1. Обновите сценарий установки Inno:

Удалите раздел [Код], который динамически создает файлы определений и пакетный сценарий. Вместо этого вручную подготовьте эти файлы и включите их в свой установщик. Вот как вам следует изменить сценарий установки Inno:

[Setup]
AppName=Chat2Find
AppVersion=1.0
DefaultDirName = {pf}\Chat2Find
DefaultGroupName=Chat2Find
OutputDir=.
OutputBaseFilename=Chat2FindInstaller
Compression=lzma
SolidCompression=yes
DiskSpanning=yes

[Files]
; Include the executable
Source: "C:\Users\presh\c2f\dist\Chat2Find.exe"; DestDir: "{app}"; Flags: ignoreversion

; Include the GGUF files
Source: "C:\Users\presh\c2f\dist\Mistral-7B-Instruct-v0.3.Q4_K_M.gguf"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\Phi-3-mini-4k-instruct-q4.gguf"; DestDir: "{app}"; Flags: ignoreversion

; Include pre-created definition files
Source: "C:\Users\presh\c2f\dist\mistral_definition"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\phi3_definition"; DestDir: "{app}"; Flags: ignoreversion

; Include the Ollama setup binary
Source: "C:\Users\presh\c2f\dist\OllamaSetup.exe"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall

; Include the batch file
Source: "C:\Users\presh\c2f\dist\run_ollama_commands.bat"; DestDir: "{app}"; Flags: ignoreversion

; Include other resources
Source: "C:\Users\presh\c2f\dist\menu.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\close.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\new_note.jpg"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\copy.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\send_icon.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\presh\c2f\dist\chat2find.jpeg"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\Chat2Find"; Filename: "{app}\Chat2Find.exe"
Name: "{commondesktop}\Chat2Find"; Filename: "{app}\Chat2Find.exe"; Tasks: desktopicon

[Tasks]
Name: "desktopicon"; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"; Flags: checkedonce

[Run]
Filename: "{tmp}\OllamaSetup.exe"; Description: "Install Ollama"; Flags: waituntilterminated runhidden

; Run Ollama commands silently
Filename: "{app}\run_ollama_commands.bat"; Parameters: ""; Flags: waituntilterminated runhidden

Filename: "{app}\Chat2Find.exe"; Description: "Launch Chat2Find"; Flags: postinstall
  1. Подготовьте командный файл:

Создайте файл run_ollama_commands.bat со следующим содержимым. Этот файл должен быть включен в ваш установщик:

@echo off
cd /d %~dp0
echo Running Ollama commands...

ollama create C2F_mistral -f mistral_definition
if %errorlevel% neq 0 (
    echo Failed to create C2F_mistral model
    exit /b %errorlevel%
)

ollama create C2F_phi3 -f phi3_definition
if %errorlevel% neq 0 (
    echo Failed to create C2F_phi3 model
    exit /b %errorlevel%
)

echo Ollama commands executed successfully. Deleting GGUF files...

del /f /q "Mistral-7B-Instruct-v0.3.Q4_K_M.gguf"
del /f /q "Phi-3-mini-4k-instruct-q4.gguf"

echo GGUF files deleted.
exit

Объяснение:

Команда @echo off подавляет вывод команды, чтобы избежать беспорядка. (Inno Setup также запускает его автоматически) cd /d %~dp0 изменяет каталог, в котором находится командный файл. Команды выполняются с проверкой ошибок, и обо всех ошибках сообщается. Файлы GGUF удаляются после успешного выполнения команды. Следуя этим инструкциям, вы обеспечите бесшумное и эффективное выполнение команд после установки.