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

TZipFile на MACOS - программный unzip, чтобы приложение запускалось


notricky

Вопрос

Опубликовано (изменено)

Собственно зазипованый файл качается, разархивируется и все файлы помещаются в папку.

Ну а дальше приложение не запускается, хотя:

 - Настройки безопасности настроены на установку из любых мест
 - Встроенный архиватор разархивирует в папку и "из-под" него приложение запускается (до настроек безопасности просто выдавало ошибку "неизвестный автор" и "у вас настроено только на аппстор или известных авторов").
 - Разумеется при деплое приложения работают. Если их просто скопировать на флешку и потом закопировать обратно - тоже работают.

Следовательно проблема при разархивировании программно. Что-то нужно добавить. Есть понимание что именно? 

Сам нетривиальный код:

var z: TZipFile;
begin
  try
    {$IFDEF MSWINDOWS}
     RenameFile(ParamStr(0),ExtractFileName(ParamStr(0)) + '.old');
     Application.ProcessMessages;
    {$ENDIF}
    SetLength(Result, 1);
    Result[0] := '';
    z := TZipFile.Create;
    z.Open(ZipFile, zmRead);
    z.ExtractAll(ExtractTo);
    Result := z.FileNames;
  finally
    z.Close;
    z.Free;
  end;
end;

В архив кладу:

 - .app взятый с мака (а по другому никак)
 - .entitlements
 - .DS_Store 

В надобности последнего я сильно сомневаюсь.

 

Изменено пользователем notricky

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

  • 0
Опубликовано (изменено)

Update: в терминале Мака

unzip -uo zipfile -d wantedDirectory

Дает такой же эффект, что программное разархирирование. То есть не запускается приложение. Вообще без никаких уведомлений.

Изменено пользователем notricky
  • 0
Опубликовано
3 часа назад, notricky сказал:

Собственно зазипованый файл качается, разархивируется и все файлы помещаются в папку.

Ну а дальше приложение не запускается, хотя:

 - Настройки безопасности настроены на установку из любых мест
 - Встроенный архиватор разархивирует в папку и "из-под" него приложение запускается (до настроек безопасности просто выдавало ошибку "неизвестный автор" и "у вас настроено только на аппстор или известных авторов").
 - Разумеется при деплое приложения работают. Если их просто скопировать на флешку и потом закопировать обратно - тоже работают.

Следовательно проблема при разархивировании программно. Что-то нужно добавить. Есть понимание что именно? 

Сам нетривиальный код:


var z: TZipFile;
begin
  try
    {$IFDEF MSWINDOWS}
     RenameFile(ParamStr(0),ExtractFileName(ParamStr(0)) + '.old');
     Application.ProcessMessages;
    {$ENDIF}
    SetLength(Result, 1);
    Result[0] := '';
    z := TZipFile.Create;
    z.Open(ZipFile, zmRead);
    z.ExtractAll(ExtractTo);
    Result := z.FileNames;
  finally
    z.Close;
    z.Free;
  end;
end;

В архив кладу:

 - .app взятый с мака (а по другому никак)
 - .entitlements
 - .DS_Store 

В надобности последнего я сильно сомневаюсь.

 

Ты пытаешься свою же созданную программу для мак ос, заархивировать, а своей же созданной разархивировать и запустить? Или я что то не понял? Если как я написал, то ничего не получится.

  • 0
Опубликовано
1 час назад, Vitaldj сказал:

Ты пытаешься свою же созданную программу для мак ос, заархивировать, а своей же созданной разархивировать и запустить? Или я что то не понял? Если как я написал, то ничего не получится.

Спасибо, Кэп. Я это наблюдаю в опыте. Описал ты все верно. Лучше расскажи, почему "не получится"?

  • 0
Опубликовано

В принципе можно и консольную команду выполнить. По сути мне без разницы, хотя конечно было бы круто, если бы это работало через апп. Но вот только консольный unzip не работает тоже. 

  • 0
Опубликовано (изменено)
7 часов назад, notricky сказал:

Спасибо, Кэп. Я это наблюдаю в опыте. Описал ты все верно. Лучше расскажи, почему "не получится"?

Все очень просто. Приложение мак представляет из себя директорию с расширением .app. Мак ее воспринимает как файл. А внутри находятся еще куча директорий и естественно, запускной файл. Нажми на фоне приложения правую кнопку мыши с кликни по 'показать содержимое пакета'. И мак тебе покажет содержимое этой директории. Вот как пример моя программа:

Screenshot at дек. 26 07-49-48.png

Наверху программа Pharmsuitepro.app, а что в ней видно. Сама программа, которую компилит дельфи (бинарник) в директории contens -> MacOs -> pharmsuitepro

Поэтому, когда ты разархивируешь другой файл, он ложится не в директорию программ, а в директорию из которой ты пытаешься разархирировать. То есть внутри другой директории. А мак такие не запускает.

Изменено пользователем Vitaldj
  • 0
Опубликовано
18 часов назад, Vitaldj сказал:

Поэтому, когда ты разархивируешь другой файл, он ложится не в директорию программ, а в директорию из которой ты пытаешься разархирировать. То есть внутри другой директории. А мак такие не запускает.

А какая именно разница между разархивацией внутри своей проги и разархивацией встроенными осью средствами? И как это повторить?

  • 0
Опубликовано
6 часов назад, notricky сказал:

А какая именно разница между разархивацией внутри своей проги и разархивацией встроенными осью средствами? И как это повторить?

Да никакой. Просто при разархивации внутри проги, нельзя указывать место запуска самой программы. 

  • 0
Опубликовано
17 часов назад, Vitaldj сказал:

Да никакой. Просто при разархивации внутри проги, нельзя указывать место запуска самой программы. 

Я же писал, что даже при использовании консольного unzip РУКАМИ ПРЯМО В МАКЕ, ситуация такая же. 

Дело вообще рядом не лежит про "место запуска самой программы".

  • 0
Опубликовано (изменено)

Тогда три вопроса:

1) приложение твое? 

2) если оно твое, то запускается ли оно до архивирования?

3) чем архивируешь?

Изменено пользователем Vitaldj
  • 0
Опубликовано
В 28.12.2016 в 05:47, Vitaldj сказал:

Тогда три вопроса:

1) приложение твое? 

2) если оно твое, то запускается ли оно до архивирования?

3) чем архивируешь?

Ооох.... Ну что за вопросы...

1) да
2) да
3) какая разница. формат zip.

  • 0
Опубликовано
4 минуты назад, notricky сказал:

Ооох.... Ну что за вопросы...

1) да
2) да
3) какая разница. формат zip.

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

Screenshot at дек. 29 20-09-08.png

То есть выбери сжать, а потом, снова достань из архива. Все будет работать. А если из винды, допустим, то ничего не получится. Я не знаю почему так. Возможно он что то добавляет в архив или как то специально помечает, маркирует его. Я не знаю почему так...

  • 0
Опубликовано

Ладно, я явно этого не указал, а ты мысли читать не умеешь, потому вопрос справедлив. :) Сорри.

Я архив создаю в Винде. 7Zip.

Если разархивирую в маке дважды кликнув - запускается.

Если разархивирую в маке unzip в консоли - не запускается.

Если разархивирую своим приложением - не запускается.

  • 0
Опубликовано
14 часов назад, notricky сказал:

Ладно, я явно этого не указал, а ты мысли читать не умеешь, потому вопрос справедлив. :) Сорри.

Я архив создаю в Винде. 7Zip.

Если разархивирую в маке дважды кликнув - запускается.

Если разархивирую в маке unzip в консоли - не запускается.

Если разархивирую своим приложением - не запускается.

Не знаю. Мыслей нет. А что пытаешься то сделать?

  • 0
Опубликовано
7 часов назад, Vitaldj сказал:

Не знаю. Мыслей нет. А что пытаешься то сделать?

Обновление :) он-лайн.

 

На винде и андроиде (не через стор) работает. На маке вот пока нет. 

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

  • 0
Опубликовано
2 часа назад, notricky сказал:

Обновление :) он-лайн.

 

На винде и андроиде (не через стор) работает. На маке вот пока нет. 

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

То есть ты пишешь модуль обновления программы на маке?

  • 0
Опубликовано
39 минут назад, Vitaldj сказал:

То есть ты пишешь модуль обновления программы на маке?

Модуль? Какой модуль? О чем речь?

Функцию и пару строк кода в программе если можно назвать модулем то да, это он.

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

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

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

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

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

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

×
×
  • Создать...