瀏覽代碼

Add Inno Setup installer script

Kak 1 周之前
父節點
當前提交
c825bcb7b7
共有 1 個文件被更改,包括 119 次插入0 次删除
  1. 119 0
      setup_freight.iss

+ 119 - 0
setup_freight.iss

@@ -0,0 +1,119 @@
+#define MyAppName "ИС Грузоперевозки"
+#define MyAppVersion "1.0"
+#define MyAppPublisher "Политехнический колледж НовГУ"
+#define MyAppExeName "WpfApp1.exe"
+
+[Setup]
+AppId={{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}
+AppName={#MyAppName}
+AppVersion={#MyAppVersion}
+AppPublisher={#MyAppPublisher}
+DefaultDirName={autopf}\{#MyAppName}
+DefaultGroupName={#MyAppName}
+AllowNoIcons=yes
+OutputDir=C:\FreightInstaller\Output
+OutputBaseFilename=Setup_FreightTransport_v1.0
+Compression=lzma2/ultra64
+SolidCompression=yes
+WizardStyle=modern
+ArchitecturesInstallIn64BitMode=x64
+PrivilegesRequired=admin
+
+[Languages]
+Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
+
+[Files]
+Source: "C:\Users\Татьяна\Desktop\FreightInstaller\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
+
+Source: "C:\Users\Татьяна\Desktop\FreightInstaller\create_tables.sql"; DestDir: "{tmp}"; Flags: dontcopy
+Source: "C:\Users\Татьяна\Desktop\FreightInstaller\create_views.sql"; DestDir: "{tmp}"; Flags: dontcopy
+Source: "C:\Users\Татьяна\Desktop\FreightInstaller\insert_test_data.sql"; DestDir: "{tmp}"; Flags: dontcopy
+
+[Icons]
+Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
+Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
+Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
+
+[Run]
+Filename: "{app}\{#MyAppExeName}"; Description: "Запустить ИС Грузоперевозки"; Flags: nowait postinstall skipifsilent
+
+[Code]
+function SetEnvironmentVariable(lpName: String; lpValue: String): Boolean;
+  external 'SetEnvironmentVariableA@kernel32.dll stdcall';
+
+var
+  DbPasswordPage: TInputQueryWizardPage;
+
+procedure InitializeWizard();
+begin
+  DbPasswordPage := CreateInputQueryPage(wpSelectDir,
+    'Настройка базы данных',
+    'Укажите параметры подключения к PostgreSQL',
+    'Для автоматической инициализации БД введите пароль суперпользователя postgres:');
+  DbPasswordPage.Add('Пароль пользователя postgres:', True);
+  DbPasswordPage.Values[0] := '';
+end;
+
+procedure CurStepChanged(CurStep: TSetupStep);
+var
+  ResultCode: Integer;
+  PsqlPath: String;
+  DbName, DbUser, DbPassword: String;
+  Params, SqlDir: String;
+begin
+  if CurStep <> ssPostInstall then Exit;
+  
+  DbPassword := DbPasswordPage.Values[0];
+  if DbPassword = '' then
+  begin
+    MsgBox('Пароль не введён. Инициализация БД пропущена.' + #13#10 +
+           'Выполните SQL-скрипты вручную из папки: ' + #13#10 +
+           ExpandConstant('{app}\'),
+           mbInformation, MB_OK);
+    Exit;
+  end;
+
+  DbName := 'freight_db';
+  DbUser := 'postgres';
+
+  PsqlPath := 'C:\Program Files\PostgreSQL\18\bin\psql.exe';
+  if not FileExists(PsqlPath) then
+    PsqlPath := 'C:\Program Files\PostgreSQL\17\bin\psql.exe';
+  if not FileExists(PsqlPath) then
+    PsqlPath := 'C:\Program Files\PostgreSQL\16\bin\psql.exe';
+  if not FileExists(PsqlPath) then
+    PsqlPath := 'C:\Program Files\PostgreSQL\15\bin\psql.exe';
+  if not FileExists(PsqlPath) then
+    PsqlPath := 'C:\Program Files\PostgreSQL\14\bin\psql.exe';
+  
+  if PsqlPath = '' then
+  begin
+    MsgBox('psql.exe не найден.', mbError, MB_OK);
+    Exit;
+  end;
+  
+  ExtractTemporaryFile('create_tables.sql');
+  ExtractTemporaryFile('create_views.sql');
+  ExtractTemporaryFile('insert_test_data.sql');
+  SqlDir := ExpandConstant('{tmp}');
+
+  SetEnvironmentVariable('PGPASSWORD', DbPassword);
+  
+  Params := '-U ' + DbUser + ' -d postgres -c "CREATE DATABASE ' + DbName + ';"';
+  Exec(PsqlPath, Params, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
+  
+  Params := '-U ' + DbUser + ' -d ' + DbName + ' -f "' + SqlDir + '\create_tables.sql"';
+  Exec(PsqlPath, Params, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
+  
+  Params := '-U ' + DbUser + ' -d ' + DbName + ' -f "' + SqlDir + '\create_views.sql"';
+  Exec(PsqlPath, Params, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
+  
+  Params := '-U ' + DbUser + ' -d ' + DbName + ' -f "' + SqlDir + '\insert_test_data.sql"';
+  Exec(PsqlPath, Params, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
+  
+  SetEnvironmentVariable('PGPASSWORD', '');
+  
+  MsgBox('База данных "' + DbName + '" успешно создана и заполнена!' + #13#10 +
+         'SQL-скрипты сохранены в: ' + ExpandConstant('{app}\'),
+         mbInformation, MB_OK);
+end;