Установка времени через UWP, написанную на c++/CX

На нашем устройстве запущено приложение с ограниченным доступом, которое не использует сетевое подключение. Продукт включается и сразу же запускает приложение UWP нашей компании в Windows 10 сборки 1703.

Это устройство является международным, и на нем необходимо установить время и дату в соответствии с текущим регионом и местными правилами перехода на летнее время.

Поскольку приложения UWP по умолчанию изолированы, такие системные вызовы обычно недоступны. Однако это приложение никогда не будет размещено в магазине, поэтому есть ли какой-либо обходной путь, который мы можем использовать, чтобы разрешить установку времени, учитывая, что нам не нужно соблюдать правила магазина? (Приложение UWP с полным доверием? Я понимаю, что это может быть ограничено конвертированными приложениями win32.)

В настоящее время время и дата считываются с помощью методов Windows::Globalization::Calendar, но у него нет метода «установщика» (предположительно из-за ограничений приложения).

Другой возможностью может быть запуск приложения win32 из приложения, которое устанавливает время; возможно, передавая время и дату в качестве параметра командной строки. Является ли это лучшим решением и будет ли оно работать? Можно ли добавить в манифест приложения что-нибудь, что могло бы активировать эту функцию?

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


person Keano    schedule 29.09.2017    source источник
comment
Есть еще кое-что, что следует учитывать, помимо поиска API для установки времени, у приложения нет соответствующих привилегий. Например, если вы выбрали запуск настольного приложения из приложения UWP, это можно сделать с помощью FullTrustProcessLauncher. Вы получите сообщение об ошибке, например, для запрошенной операции требуется повышение прав.   -  person kennyzx    schedule 02.10.2017


Ответы (2)


Это приложение никогда не будет размещено в магазине

Вы можете подумать об использовании Компоненты среды выполнения Windows через посредников. Это стало возможным благодаря тому, что загружаемые неопубликованные приложения универсальной платформы Windows могут взаимодействовать с процессами рабочего стола за пределами контейнера приложений.

Этот блог о Шпаргалка по использованию компонентов среды выполнения Windows через посредника для загружаемых неопубликованными приложениями Магазина Windows также предназначена для ваших подробностей.

Вот пример кода для справки: https://code.msdn.microsoft.com/windowsapps/Brokered-Windows-Runtime-9d64cada

person Xie Steven    schedule 02.10.2017
comment
Спасибо - кажется, это самое близкое к тому, что я себе представлял. Я не использовал это в прошлом, поэтому мне придется поэкспериментировать, чтобы увидеть, решит ли это в конечном итоге проблему. Я приму это как ответ. Очень признателен. - person Keano; 06.10.2017

я думаю, вам лучше использовать WPF, а затем портировать его в магазин через настольный мост.

WPF очень похож на uwp за исключением песочницы, вы можете создать новый проект wpf в blend и использовать тот же xaml, который вы использовали в приложении uwp.

это будет работать только на настольных компьютерах и поверхностных концентраторах, так что имейте это в виду.

ps: запуск приложения win32 из uwp возможен, но он также ограничит его только рабочим столом, поэтому в любом случае вам лучше использовать WPF.

https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-root

person Xeorge Xeorge    schedule 29.09.2017
comment
Большое спасибо за предложенный ответ. В данном случае приложение большое и уже портировано с чистого C++ (оно использует C++/CX только в ABI). Можно ограничить выполнение на рабочем столе, но было бы нецелесообразно переписывать код на С#, чтобы получить доступ к этой единственной функции. Я бы предпочел не запускать приложение win32 для выполнения этой задачи, если в этом нет крайней необходимости! - person Keano; 29.09.2017
comment
@Keano msdn.microsoft.com/en-us/library/ есть эта структура timedate, которая может помочь, но опять же она не будет устанавливать системное время. - person Xeorge Xeorge; 29.09.2017