Перейти к содержанию
Fire Monkey от А до Я
  • 0

выполнение скрипта installer-pkg


Vizit0r

Вопрос

доброго времени суток!

выполняю скрипт 'do shell script "installer-pkg /Users/alex/Library/Containers/stealth/Data/Public/ Stealth.pkg -target /" with administrator privileges' (код ниже). Долго и нудно пытался выяснить, почему на девелоперской машине то работает, то нет, а у обычного пользователя всегда нет. Пришел к тому, что при установленном приложении в /Applications скрипт не срабатывает вообще, запроса пароля нет, при этом в словаре errorInfo нет ключа NSAppleScriptErrorNumber, eventResult = nil. причина не ясна вообще. На девелоперской  же машине, оно нормально выкидывает окно запроса пароля, при отмене обрабатывает ошибку, при вводе пароля - не задумываясь обновляет stealth.app в scratch-dir от paserver'а, а не в /Applications. 

Естественно, что из того же ScriptEditor этот же скрипт отлично обновляет приложение, установленное в /Applications.

Есть четкое ощущение, что это маковские заморочки с правами, подскажите, куда копать?

Приложение подписанное обоими сертификами, но не нотаризовано, ибо x32. Delphi Rio, MacOs Mojave 10.14.3

P.S. Собственно, для чего это всё: По согласию пользователя качается файл обновления (.pkg) с сайта, обновляется (желательно в тихом режиме, программа перезапускается).  Запуск обновления  в ручном режиме я давно сделал, но хотелось бы делать это в автомате, а от пользователя только ввод пароля.

Код:

function runProcessAsAdministrator(const scriptPath: string; Parameters: array
of string; out OutputText : String) : Boolean;
var
  appleScript : NSAppleScript;
  I : Integer;
  eventResult : NSAppleEventDescriptor;
  errorInfo : NSDictionary;
  cb_ptr : Pointer;
  errorNumber : NSNumber;
  allArgs,fullScriptLine : String;
  scriptExecLine : NSString;
  arr : NSArray;
begin
  if Length(Parameters) > 0 then
  begin
    for I := 0 to Length(Parameters)-1 do
      allArgs := allArgs + Parameters[i] + ' ';
    allArgs := allArgs.TrimRight;
  end;     
  fullScriptLine := scriptPath + ' ' + allArgs;
  scriptExecLine := StrToNSStr('do shell script "' + fullScriptLine +'" with administrator privileges');
  appleScript := TNSAppleScript.Wrap(TNSAppleScript.Alloc.initWithSource(scriptExecLine));
  eventResult := TNSAppleEventDescriptor.Alloc;
  eventResult := appleScript.executeAndReturnError(@cb_ptr);
  errorInfo := TNSDictionary.Wrap(cb_ptr);

  Result := Assigned(eventResult);
  if Result then
    OutputText := NSStrToStr(eventResult.stringValue)
  else
  begin
    if Assigned(errorInfo) then
    begin
      cb_ptr := errorInfo.valueForKey(NSAppleScriptErrorNumber);
      if Assigned(cb_ptr) then
      begin
        errorNumber := TNSNumber.Wrap(cb_ptr);
        if errorNumber.intValue = -128 then
          OutputText := 'The administrator password is required to do this.'
        else
          OutputText := NSStrToStr(TNSString.Wrap(cb_ptr));
      end
      else  //debug purpose only!!!
      begin
        i := errorInfo.count; //if we have real error - here will be 5, else 4
        cb_ptr := errorInfo.allKeys;//if Dict is empty, this pointer will be zero
        if Assigned(cb_ptr) then
        begin
          arr := TNSArray.Wrap(cb_ptr); //result looks like incorrect
          i := arr.Count;    //this will return AV always!
          for I := 0 to arr.Count - 1 do
            OutputText:= NSStrToStr(TNSString.Wrap(arr.objectAtIndex(i)));
        end;
      end;
    end;
  ShowMessageMultiplatform('Returnval =  ' + Boolean.ToString(Result,TUseBoolStrs.True) + sLineBreak
                         + 'OutText = ' + OutputText);
  end;
end;

 

Ссылка на комментарий

Рекомендуемые сообщения

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...