Как установить системное время в Windows 10 IoT?
Есть ли способ установить системное время из моего приложения, работающего на Raspberry Pi 2 в Windows 10 IoT Core Insider Preview?
Это не работает из-за отсутствия kernel32.dll
[DllImport("kernel32.dll", EntryPoint = "SetSystemTime", SetLastError = true)]
extern static bool Win32SetSystemTime(ref SystemTime sysTime);
Ответы
Ответ 1
Сначала подключитесь к вашему Pi 2 с помощью PowerShell.
Используйте команду set-date
, чтобы установить время. Например, если вы хотите установить дату в субботу, 3 октября 2015 года, 2:00 вечера, введите set-date 10/3/2015 2:00PM
.
Команда tzutil
устанавливает часовой пояс. Тип tzutil /?
для использования
Ответ 2
Вы можете вызвать любую процедуру PowerShell из С# в системах UWP/IoT-Core. Таким образом, команды PowerShell всегда доступны в вашем приложении.
В качестве примера см. Образец ProcessLauncher на GitHub.
АЛЬТЕРНАТИВА, планируйте запуск PS script следующим образом:
Запустите PowerShell в качестве администратора на плате (нажмите кнопку Windows и начните вводить PowerShell, щелкните правой кнопкой мыши по значку и выберите "Запуск от имени администратора" ).
Set-ExecutionPolicy RemoteSigned
PuTTy для RPi как admin и:
setx PATH "% PATH%; C:\Windows\System32"
schtasks/create/tn "StartupPowerShell" /tr c:\Startup.bat/sc onstart/ru SYSTEM
startup.bat
powershell -command "C:\IotCoreStartup.ps1"
IotCoreStartup.ps
$logFile = 'C:\StartupLog.txt'
get-date > $logFile
tzutil /s "UTC" >> $logFile
# set alternate time servers
"Setting additional time servers" >> $logFile
w32tm /config /syncfromflags:manual /manualpeerlist:"0.windows.time.com 1.pool.ntp.org" >> $logFile
Удаление запланированной задачи, если необходимо:
schtasks/Delete/TN "StartupPowerShell"
Запуск запланированной задачи, если необходимо проверить:
schtasks/Run/tn "StartupPowerShell"
Ответ 3
Похоже, что сейчас нет способа редактировать системное время, но вот работа, которую я придумал, чтобы получить правильное время в вашем приложении, по крайней мере.
Я создал класс TimeManager, важные части следующие.
Получите правильное время, как вы хотите (например, NTP, другое сетевое время, ввод пользователя и т.д.) и введите метод UpdateOffset.
В остальной части приложения используется TimeManager.Now вместо DateTime.Now
static TimeSpan _offset = new TimeSpan(0,0,0);
public static TimeSpan CurrentOffset //Doesn't have to be public, it is for me because I'm presenting it on the UI for my information
{
get { return _offset; }
private set { _offset = value; }
}
public static DateTime Now
{
get
{
return DateTime.Now - CurrentOffset;
}
}
static void UpdateOffset(DateTime currentCorrectTime) //May need to be public if you're getting the correct time outside of this class
{
CurrentOffset = DateTime.UtcNow - currentCorrectTime;
//Note that I'm getting network time which is in UTC, if you're getting local time use DateTime.Now instead of DateTime.UtcNow.
}
Я также предлагаю добавить такие вещи, как отслеживание последнего времени обновления, и флаг, чтобы указать, было ли время когда-либо обновлено, просто не захотелось загромождать образец кода.
Ответ 4
Я использовал RTC, чтобы установить время на моей Малиновой Пи. Хотя Windows-iot не имеет встроенной поддержки для инициализации программных часов Raspberry Pi из часов реального времени после нескольких часов рассмотрения вариантов, я нашел что-то, что работает для меня.
Я создал консольную программу, которая может либо сохранить системное время в RTC, либо прочитать время в RTC и напечатать его как строку. Я сделал оболочку питания script, которая будет запускать эту программу во время запуска системы, чтобы получить время от часов реального времени и передать строку команде set-date.
Подробности здесь: http://www.codeproject.com/Articles/1113626/Adding-the-Missing-Real-Time-Clock-to-Windows-IoT
Ответ 5
Использовать оболочку Renci SSH для входа в устройство в качестве администратора, а затем использовать команду powershell для установки даты и времени.
public static int SshCommand(string command, out string dataOut, out string error)
{
dataOut = "";
error = "";
try
{
using (var client = new SshClient("127.0.0.1", USER_NAME, PASSWORD))
{
client.Connect();
//command = "powershell -Command " + "\u0022" + "set-date -date '8/10/2017 8:30:00 AM'" + "\u0022";
//command = "netsh interface ip show config";
var cmd = client.RunCommand(command);
var output = cmd.Result;
client.Disconnect();
}
return 1;
}
catch (Exception ex)
{
error = ex.Message;
return 0;
}
}
public static int SSHSetDateTime(DateTime dateTime)
{
// Variables
int returnValue = 0;
string command;
string error;
string dataOut;
// Build date
command = String.Format("powershell -Command \u0022set-date -date '{0:M/d/yyyy H:mm:ss tt}'\u0022", dateTime);
//Build date
if (SystemEx.SshCommand(command, out dataOut, out error) == 1)
{
// Ok
returnValue = 1;
}
// Return
return returnValue;
}
Ответ 6
обратитесь к Справочным документам Microsoft API и в пространстве имен Windows.System вы можете установить системную дату и время с помощью метода SetSystemDateTime.
но вы должны знать, что он доступен в
- Windows IoT Extension SDK (введено v10.0.16225.0) и выше
вы можете использовать статический класс DateTimeSettings
public static class DateTimeSettings
затем вызовите статический метод SetSystemDateTime и отправьте свой объект типа DateTimeOffset для установки даты и времени в Windows Iot.
public static void SetSystemDateTime(DateTimeOffset utcDateTime)
https://docs.microsoft.com/en-us/uwp/api/windows.system.datetimesettings
Ответ 7
Я понимаю, что вы спрашиваете, как это сделать программно, однако следующее должно предоставить достаточную информацию для создания PS script для запуска при запуске.
Удаленный доступ к малине Pi через Powershell
1.) Запустите утилиту Windows Ion Core Watcher (C:\Program Files (x86)\Microsoft IoT\WindowsIoTCoreWatcher.exe) на компьютере разработки и скопируйте свой IP-адрес Raspberry Pi, щелкнув правой кнопкой мыши на обнаруженном устройстве и выберите "Копировать IP-адрес".
◦Нажмите кнопку "Пуск" на окнах
◦Выберите "WindowsIoTCoreWatcher", чтобы потянуть его в результатах поиска
◦Вы можете щелкнуть правой кнопкой мыши по имени программы и выбрать "Pin to Start", чтобы прикрепить его к стартовому экрану для легкого доступа.
◦Нажмите Enter, чтобы запустить его
◦ Ваше устройство должно появиться в списке в течение 5 секунд или около того. Если этого не произойдет, закройте Windows 10 IoT Core Watcher и снова запустите его.
![Windows IoT Core Watcher]()
2.) Запустите консоль PowerShell администратора на локальном ПК. Самый простой способ сделать это - набрать "powershell" в поле "Поиск в Интернете" и "Windows" рядом с меню "Пуск" Windows. Windows найдет PowerShell на вашем компьютере. Щелкните правой кнопкой мыши запись Windows PowerShell и выберите "Запуск от имени администратора". Консоль PS покажет.
![Запуск Powershell как администратора]()
3.) Вам может потребоваться запустить службу WinRM на рабочем столе, чтобы включить удаленные подключения. В консоли PS введите следующую команду:
net start WinRM
4.) На консоли PS введите следующую команду, заменив значение '' значением IP, скопированным в prev:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value <machine-name or IP Address>
5. Введите Y и нажмите Enter, чтобы подтвердить изменение.
6. Теперь вы можете начать сеанс с вашего устройства Windows IoT Core. От администратора консоли администратора введите:
Enter-PSSession -ComputerName <IP Address> -Credential localhost\Administrator
7.В диалоговом окне учетных данных введите следующий пароль по умолчанию:
р @ssw0rd
Примечание. Процесс подключения не является немедленным и может занять до 30 секунд.
Если вы успешно подключились к устройству, перед подсказкой вы должны увидеть IP-адрес своего устройства.
![Подключено к малине с помощью PS]()
Переименование устройства и установка даты и времени
1.Чтобы сменить имя компьютера, используйте утилиту setcomputername. В PowerShell введите следующую команду.
setcomputername
2. Дата и время на Pi должны быть правильными для токенов безопасности, используемых для публикации в Azure позже в лаборатории, чтобы быть действительными. Чтобы проверить текущий часовой пояс на Pi, введите:
tzutil/g
3. Если указанный часовой пояс не соответствует действительности, вы можете найти список допустимых часовых поясов (вам может потребоваться увеличить размер буфера в окне PowerShell):
tzutil/l
4. Чтобы установить часовой пояс, найдите идентификатор требуемого часового пояса с шага выше, а затем используйте:
tzutil/s "Ваше имя часового пояса"
Например, для "Тихоокеанского стандартного времени"
tzutil/s "Стандартное тихоокеанское время"
5.Чтобы проверить дату на малине Pi, введите
Get-Date
6.Если дата или время неверны, используйте утилиту Set-Date
Set-Date "mm/dd/yy hh: mm: ss AM/PM"
Например, если это было 12:15 вечера 3 января 2016 года:
Установочная дата "01/03/16 12:15 PM"
7. Перезагрузите устройство, чтобы изменения вступили в силу. Вы можете использовать команду shutdown следующим образом:
shutdown/r/t 0
Ответ 8
1-Новый универсальный проект
2-Add Reference > Расширения > Расширения Windows IOT для UWP
3- Поместите кнопку, датупик и элемент управления Timepicer на свой MainPage.xaml
и
private void buttonSetSystemDatetime_Click(object sender, RoutedEventArgs e)
{
DateTimeOffset dto = datePicker1.Date+ timePicker1.Time;
Windows.System.DateTimeSettings.SetSystemDateTime(dto);
}
4- в настройках проектa > установите целевую версию и версию мин. 10.0; построить 16299
5- двойной щелчок appxmanifest > Возможности > установите флажок "Управление системой"
6-запустить приложение в IOT и нажать кнопку. чем возврат к стандартным приложениям. вуаля! дата и время системы изменены.
note: скорее для его установки каждый раз. Я предлагаю вам купить дешевый модуль RTT (часы реального времени). (также требуется дополнительное кодирование)