setup_freight.iss 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #define MyAppName "ИС Грузоперевозки"
  2. #define MyAppVersion "1.0"
  3. #define MyAppPublisher "Политехнический колледж НовГУ"
  4. #define MyAppExeName "WpfApp1.exe"
  5. [Setup]
  6. AppId={{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}
  7. AppName={#MyAppName}
  8. AppVersion={#MyAppVersion}
  9. AppPublisher={#MyAppPublisher}
  10. DefaultDirName={autopf}\{#MyAppName}
  11. DefaultGroupName={#MyAppName}
  12. AllowNoIcons=yes
  13. OutputDir=C:\FreightInstaller\Output
  14. OutputBaseFilename=Setup_FreightTransport_v1.0
  15. Compression=lzma2/ultra64
  16. SolidCompression=yes
  17. WizardStyle=modern
  18. ArchitecturesInstallIn64BitMode=x64
  19. PrivilegesRequired=admin
  20. [Languages]
  21. Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
  22. [Files]
  23. Source: "C:\Users\Татьяна\Desktop\FreightInstaller\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
  24. Source: "C:\Users\Татьяна\Desktop\FreightInstaller\create_tables.sql"; DestDir: "{tmp}"; Flags: dontcopy
  25. Source: "C:\Users\Татьяна\Desktop\FreightInstaller\create_views.sql"; DestDir: "{tmp}"; Flags: dontcopy
  26. Source: "C:\Users\Татьяна\Desktop\FreightInstaller\insert_test_data.sql"; DestDir: "{tmp}"; Flags: dontcopy
  27. [Icons]
  28. Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
  29. Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
  30. Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
  31. [Run]
  32. Filename: "{app}\{#MyAppExeName}"; Description: "Запустить ИС Грузоперевозки"; Flags: nowait postinstall skipifsilent
  33. [Code]
  34. function SetEnvironmentVariable(lpName: String; lpValue: String): Boolean;
  35. external 'SetEnvironmentVariableA@kernel32.dll stdcall';
  36. var
  37. DbPasswordPage: TInputQueryWizardPage;
  38. procedure InitializeWizard();
  39. begin
  40. DbPasswordPage := CreateInputQueryPage(wpSelectDir,
  41. 'Настройка базы данных',
  42. 'Укажите параметры подключения к PostgreSQL',
  43. 'Для автоматической инициализации БД введите пароль суперпользователя postgres:');
  44. DbPasswordPage.Add('Пароль пользователя postgres:', True);
  45. DbPasswordPage.Values[0] := '';
  46. end;
  47. procedure CurStepChanged(CurStep: TSetupStep);
  48. var
  49. ResultCode: Integer;
  50. PsqlPath: String;
  51. DbName, DbUser, DbPassword: String;
  52. Params, SqlDir: String;
  53. begin
  54. if CurStep <> ssPostInstall then Exit;
  55. DbPassword := DbPasswordPage.Values[0];
  56. if DbPassword = '' then
  57. begin
  58. MsgBox('Пароль не введён. Инициализация БД пропущена.' + #13#10 +
  59. 'Выполните SQL-скрипты вручную из папки: ' + #13#10 +
  60. ExpandConstant('{app}\'),
  61. mbInformation, MB_OK);
  62. Exit;
  63. end;
  64. DbName := 'freight_db';
  65. DbUser := 'postgres';
  66. PsqlPath := 'C:\Program Files\PostgreSQL\18\bin\psql.exe';
  67. if not FileExists(PsqlPath) then
  68. PsqlPath := 'C:\Program Files\PostgreSQL\17\bin\psql.exe';
  69. if not FileExists(PsqlPath) then
  70. PsqlPath := 'C:\Program Files\PostgreSQL\16\bin\psql.exe';
  71. if not FileExists(PsqlPath) then
  72. PsqlPath := 'C:\Program Files\PostgreSQL\15\bin\psql.exe';
  73. if not FileExists(PsqlPath) then
  74. PsqlPath := 'C:\Program Files\PostgreSQL\14\bin\psql.exe';
  75. if PsqlPath = '' then
  76. begin
  77. MsgBox('psql.exe не найден.', mbError, MB_OK);
  78. Exit;
  79. end;
  80. ExtractTemporaryFile('create_tables.sql');
  81. ExtractTemporaryFile('create_views.sql');
  82. ExtractTemporaryFile('insert_test_data.sql');
  83. SqlDir := ExpandConstant('{tmp}');
  84. SetEnvironmentVariable('PGPASSWORD', DbPassword);
  85. Params := '-U ' + DbUser + ' -d postgres -c "CREATE DATABASE ' + DbName + ';"';
  86. Exec(PsqlPath, Params, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
  87. Params := '-U ' + DbUser + ' -d ' + DbName + ' -f "' + SqlDir + '\create_tables.sql"';
  88. Exec(PsqlPath, Params, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
  89. Params := '-U ' + DbUser + ' -d ' + DbName + ' -f "' + SqlDir + '\create_views.sql"';
  90. Exec(PsqlPath, Params, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
  91. Params := '-U ' + DbUser + ' -d ' + DbName + ' -f "' + SqlDir + '\insert_test_data.sql"';
  92. Exec(PsqlPath, Params, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
  93. SetEnvironmentVariable('PGPASSWORD', '');
  94. MsgBox('База данных "' + DbName + '" успешно создана и заполнена!' + #13#10 +
  95. 'SQL-скрипты сохранены в: ' + ExpandConstant('{app}\'),
  96. mbInformation, MB_OK);
  97. end;