Перейти к содержанию

Вопросы

Целый месяц бодаюсь с Microsoft Store, пытаясь разместить у них свое UWP-приложение в виде пакета appx. Получаю отлуп за отлупом. Проблема: приложение должно располагать папкой для пользователя, отличной от установочного каталога, где он мог бы сохранять файлы. Там же должны храниться файлы настроек. Раньше, создавая дистрибутив в InnoSetup, я всегда предусматривал создание такой папки по адресу <user>\AppData\Roaming\MyApp. Теперь всё полагается указывать в разделе Deployment - но как там указать такой адрес? Вроде бы, есть графа "Remote path", и логично существовать каким-то макросам для нее, вроде AppData - но никакой информации на эту тему я найти не смог. Видел лишь упоминания таких макросов, как res, assets, classes, library - однако все они, как я понял, относятся к мобильным платформам.

Попытки обходных маневров не удались. Сначала я решил всё класть в установочный каталог, а при первом запуске создавать нужную папку и перебрасывать в нее несколько файлов. На моем компьютере это работает, но при тестировании в Microsoft Store отчего-то валится (присылают скриншот с сообщением "Access is denied"). То ли нельзя стирать файлы в установочном каталоге, то ли нельзя в таком режиме создавать новый каталог. Потом я прочитал где-то, что UWP-приложениям всё равно, где лежат файлы, они могут их менять даже в установочном каталоге. Попробовал всё валить в одну кучу и так работать. Увы, опять отрапортовали о падении ("The app tries to create a file under WindowsApps folder").

Получается, что все-таки нужно как-то заставить appx-дистрибутив создавать при установке папку по адресу <user>\AppData\Roaming\MyApp. Но как?

Спрашивал на experts-exchange, там знатоков не нашлось. Если и здесь нет, может, кто-нибудь хотя бы подскажет, в каких местах есть смысл спросить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

  • 0
16 минут назад, Равиль Зарипов (ZuBy) сказал:

А что при запуске нельзя создать?

Не понял вопроса. Вы спрашиваете, чего именно нельзя создать при запуске? Или (если бы была запятая после слова "что") спрашиваете, отчего я не могу при запуске создать означенного каталога? Если второе, то да, как я уже написал, отчего-то нельзя. То есть, на моем компе можно, а на их конце - где тестировщики из Microsoft Store гоняют мою программу - она на этом месте валится. Почему валится, они не объясняют.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Мне кажется, что дело в привилегиях. Не хватает каких-то прав.  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
15 минут назад, wamaco сказал:

Мне кажется, что дело в привилегиях. Не хватает каких-то прав.

Меня тоже такая мысль посещала. Но как это проверить? И главное, где раздобыть эти права, если дело действительно в них?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Обратился по электронной почте к известному специалисту Марко Канту. Он тоже не знает никаких констант для Remote path и считает, что приложение должно само распихивать файлы по каталогам при первом запуске. А на вопрос, отчего у меня так не выходит и не нужны ли здесь какие-то дополнительные права и привилегии, ответил так:

"An UWP pass has limited access to the file system. I really don't remember which folder you can write to, and which are off limits... There is Microsoft documentation covering it."

Мое приложение пытается создать и использовать папку в каталоге CSIDL_COMMON_APPDATA. Неужели это может быть по умолчанию запрещено?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
18 часов назад, Вадим Смоленский сказал:

Меня тоже такая мысль посещала. Но как это проверить? И главное, где раздобыть эти права, если дело действительно в них?

Думаю, что в манифесте где-то...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
7 часов назад, wamaco сказал:

Думаю, что в манифесте где-то...

А вот, кстати, не факт, что дело в манифесте или вообще в каких-то правах. Тот же Марко Канту оказался столь любезен, что прислал мне ссылку на страницу майкрософтовской документации, где написано: мол, при установке любого UWP-приложения автоматически формируется хранилище пользовательских данных из трех папок, цитирую: one for local files, one for roaming files, and one for temporary files. Получается, что ни в каких AppData ничего создавать и не нужно, система сама всё создаст в подходящем месте.

Мне, однако, остается непонятным, как приложению заполучить полный адрес этого хранилища - конкретно, папки для Local app data.На указанной странице  есть инструкции, но они написаны на незнакомом мне C#. Есть также ссылки на документацию об используемом классе ApplicationData, там C# и C++, тоже малопонятный. Не поможет ли кто-нибудь перетолмачить это дело на Delphi?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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


  • Похожий контент

    • От Вадим Смоленский
      Проблема обозначена в заголовке. Подробнее: при дефолтных установках TFDConnection.ResourceOption  (включенных EscapeExpand, MacroCreate, MacroExpand, ParamCreate, ParamExpand) функция Locate возвращает False. При отключении этих параметров Locate падает с сообщением "Unrecognized token {"
      Вынужден вместо Locate использовать Filter, очень сильно проигрывая в скорости. Хотелось бы все-таки понять, в чем тут дело.
       
    • От Вадим Смоленский
      Наверное, детский вопрос задам, и все-таки. Вдруг обнаружил, что в моем проекте никакие блоки try...except не срабатывают. Видимо, дело в каких-то настройках — но в каких именно? Иду в Options => Debugger Options => Embarcadero Debuggers => Native OS Exceptions, пробую там менять установки, толку никакого. Более того — пытаюсь искусственно спровоцировать падение делением на ноль — и вообще никакого падения не происходит, деление на ноль дает ноль! Такая же примерно ерунда с попыткой устроить переполнение.
      Ткните меня в причину носом кто-нибудь, пожалуйста.
      UPD  Через два дня хаотичных экспериментов с настройками всё прочихалось, и exceptions благополучно работают. В чем было дело, так и не понял.
    • От Вадим Смоленский
      У одного из тестировщиков, под Windows, моя сборка регулярно падает с такой ошибкой:
      Cannot create rendering target for 'TCanvas2D2'
      В свое время я и сам с этим сталкивался. У себя поборол уменьшением размеров всех TBitmap ниже некоторого предела. Померили максимальный размер TBitmap на компьютере тестировщика функцией TCanvasManager.DefaultCanvas.GetAttribute(TCanvasAttribute.MaxBitmapSize), получилось 8192. На моем компьютере столько же — однако у него падает, а у меня нет. Причем падает не при отрисовке изображения, а уже потом, при каких-то случайных действиях, с отрисовкой не связанных. Всякий раз непредсказуемо. Но он заметил, что если на форму выведено больше крупных изображений, то падает быстрее.
      Как это трактовать и что с этим делать?
    • От Вадим Смоленский
      Узнал, что в UWP API включены средства для получения уникального идентификатора компьютера. Это юнит Windows.System.Profile, класс HardwareIdentification, метод getPackageSpecificToken. Существуют ли способы обратиться к этим средствам из Delphi?
      Вообще, я привык считать, что такая идентификация компьютера в принципе невозможна, в отличие от мобильных устройств. Но прогресс, как известно, не остановить.
    • От Вадим Смоленский
      Для задач, связанных с вводом японского текста, мне нужно научиться перехватывать системное сообщение WM_IME_NOTIFY. Насколько могу судить, в FireMonkey эти вещи делаются (если вообще делаются) принципиально иначе, нежели в VCL. Конкретного ничего не нагуглил. Не поможет ли кто?
    • От slav_z
      У меня для приложений написанных на FireMonkey не вызывается меню игры windows. Для VCL все в порядке. XE8. Если у кого есть решение этой проблемы, поделитесь пожалуйста. (комбинация клавиш Win+G при запущенном приложении)
    • От Вадим Смоленский
      В многомесячной борьбе с Microsoft Store за размещение у них своего Windows-приложения я продвинулся настолько, что вплотную подошел к организации взимания денег с покупателей посредством механизма add-ons (in-app purchases). Но здесь меня ждала очередная засада. Необходимые программные инструменты, главным из которых считается класс StoreContext, лежат в пространстве имен Windows.Services.Store; файлы с такими именами (windows.services.store.h и windows.services.store.idl) в Windows 10 действительно находятся; но в Delphi я не могу найти юнита с чем-то подобным. Хотя на одном форуме видел утверждение годичной давности, что в релизе 10.2 Tokyo это уже есть.
      Не может ли кто-нибудь пролить свет? Не там ищу? Все-таки еще не добавили? Или, может, это появилось лишь в самой последней сборке 10.2.3? У меня стоит 10.2.2.
      Обещание написать подробную статью по итогам моих мытарств остается в силе. На этом пути столько подводных камней и неочевидных ходов, что грех о них не поведать. Но сначала нужно дойти до победного конца.
    • От POV
      Винда 10, два компа (рабочий ноут и планшет от мелкософта - у первого 100% экран, у другого 200%).
      Исходя из габаритов разных там компонентов и другой формы, рассчитываю Top и Left интересующей меня формы. На ноуте выводится где и хотел, а на планшете выше и левее. Смещение не кратно никак масштабу. В доступе планшета нет, как отлаживать не придумаю.
      Косяк всё же в в масштабе может быть или иное?
    • От Вадим Смоленский
      В феврале я сетовал, что мое Windows-приложение не хочет нормально запускаться в Linux под Wine 3.0. Но время идет, вышел Wine 3.6 - и теперь один из тестировщиков радостно сообщил, что всё заработало, за вычетом одного досадного момента. А именно: приложение способно сохранять фокус ввода лишь долю секунды, потом теряет. Соответственно, невозможно ничего ввести в текстовые боксы, разве только одну-две буквы. Можно щелкнуть по заголовку приложения, оно опять получит фокус - и через мгновение снова потеряет. Куда именно при этом переходит фокус, непонятно. Тестировщик утверждает, что только мое приложение ведет себя так, все остальные работают нормально.
      Нет ли у кого-нибудь идей? Что нужно проверить?
  • Последние посетители   0 пользователей онлайн

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

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