Как установить системное время в 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 (часы реального времени). (также требуется дополнительное кодирование)