Создание непрерывного приглашения cmd в inno-setup для включения установки postgres

Я использую установку inno и пытаюсь установить postgres, однако я не могу успешно загрузить сервер в разделе запуска, потому что он закрывается из моего окна командной строки cmd, где я вошел в систему как пользователь admin.

Кто-нибудь знает, как создать непрерывное приглашение cmd, чтобы я мог делать postgres?

Вот мой код:

[Run]

Filename: "{cmd}"; Flags: runasoriginaluser; Parameters: "/k{src}\..\pgsql\bin/pg_ctl register -N postgres -U postgres -P postgres -D C:\eltfiles\pgsql\data -W -t -o {src}\..\pgsql\bin/initdb -U postgres -A password -E utf8 --pwfile={src}\..\pgsql\bin\password.txt -D C:\xxxfiles\pgsql\data"

Filename: "{cmd}"; Flags: runasoriginaluser; Parameters: "/k {src}\..\pgsql\bin/pg_ctl -D C:\xxxfiles\pgsql\data -l logfile start"

person Dant.A    schedule 19.05.2016    source источник
comment
Вы можете уточнить? Понятия не имею, о чем вы просите. Может, скриншоты помогут.   -  person Martin Prikryl    schedule 19.05.2016
comment
После инициализации базы данных с помощью первого приглашения я использую вторую подсказку и запускаю базу данных, но не могу, потому что получаю ошибку отказа в доступе.   -  person Dant.A    schedule 19.05.2016


Ответы (1)


Просто запустите установку в своем разделе запуска следующим образом (без звука):

[Run]
Filename: "{tmp}\postgresql.exe"; Parameters: "--mode unattended --unattendedmodeui none --datadir {commonappdata}\PostgreSQL\8.4\data --install_runtimes 0"; AfterInstall: CreateDatabase; 

Вызовите этот метод из AfterInstall:

function CreateDatabase() : Boolean;
var
  InstallPath: String;
  DataPath: String;
  ResultCode: Integer;

begin
  Result := False;

  InstallPath := ExpandConstant('{pf}\PostgreSQL\8.4\bin');
  DataPath := ExpandConstant('{#ProgramDataDirectory}\PostgreSQL\8.4\data');  

  //Clear old data out
  DelTree(DataPath, True, True, True);

  // First we must initialise our server
  if Exec(InstallPath + '\initdb', '-D ' + DataPath, '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
  begin
    // Now start our postgres process
    if Exec(InstallPath + '\pg_ctl', 'start -w -D ' + DataPath, '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
    begin
      // Create our database user
      if Exec(InstallPath + '\createuser', '-w -d -R -S username', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
      begin
        // Create our database 
        if Exec(InstallPath + '\createdb', 'database', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then     
           Result := True;
        end;
      end;
    end;
  end
end;

Это работает. Раньше я использовал нечто подобное.

person kh25    schedule 20.05.2016