Windows 10 IoT Core Insider PreviewのRaspberry Pi 2でアプリを実行してシステム時間を設定する方法はありますか?
これはkernel32.dllがないため機能しません
[DllImport("kernel32.dll", EntryPoint = "SetSystemTime", SetLastError = true)]
extern static bool Win32SetSystemTime(ref SystemTime sysTime);
まず、 PowerShellを使用してPi 2に接続する です。
コマンドset-date
を使用して時間を設定します。たとえば、日付を2015年10月3日土曜日の午後2時に設定する場合は、set-date 10/3/2015 2:00PM
と入力します。
コマンドtzutil
はタイムゾーンを設定します。 tzutil /?
と入力すると使用法が表示されます
1-新しいユニバーサルプロジェクト
2-Add Reference> Extensions> Windows IOT Extensions for UWP
3- MainPage.xamlにボタン、日付ピッカー、タイムピッカーコントロールを配置します
そして
private void buttonSetSystemDatetime_Click(object sender, RoutedEventArgs e)
{
DateTimeOffset dto = datePicker1.Date+ timePicker1.Time;
Windows.System.DateTimeSettings.SetSystemDateTime(dto);
}
4-プロジェクトの設定で>ターゲットバージョンと最小バージョン10.0を設定します。ビルド16299
5- appxmanifestをダブルクリック>機能>「システム管理」をオンにします
6-IOTでアプリを実行し、ボタンを押します。デフォルトのアプリに戻ります。出来上がり!システムの日時が変更されました。
注:毎回設定するのではなく。安いrtc(リアルタイムクロック)モジュールの購入を提案します。 (追加のコーディングも必要です)
UWP/IoT-CoreシステムのC#からPowerShellルーチンを呼び出すことができます。そのため、PowerShellコマンドは常にアプリ内で利用できます。
例については、 GitHubのProcessLauncherサンプル を参照してください。
ボードで管理者としてPowerShellを実行します(Windowsボタンを押してPowerShellと入力し、アイコンを右クリックして[管理者として実行]を選択します)。
Set-ExecutionPolicy RemoteSigned
管理者としてのRPiへのPuTTYおよび:
setx PATH "%PATH%; C:\ Windows\System32"
schtasks/create/tn "StartupPowerShell"/tr c:\ Startup.bat/sc onstart/ru SYSTEM
powershell -command "C:\IotCoreStartup.ps1"
$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"
現在のところ、システム時刻を実際に編集する方法はないようですが、少なくともアプリで正しい時刻を取得するために思いついた回避策は次のとおりです。 TimeManagerクラスを作成しましたが、重要な部分は以下の通りです。
正しい時刻を取得し(NTP、他のネットワーク時刻、ユーザー入力など)、UpdateOffsetメソッドに入力します。
アプリの残りの部分では、DateTime.Nowの代わりにTimeManager.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.
}
最後の更新時刻の追跡などの追加や、時刻が更新されたかどうかを示すフラグを追加することもお勧めしますが、コードサンプルを散らかりたくありませんでした。
RTC=を使用してRaspberry Piの時間を設定しました。Windows-iotは、数時間オプションを検討した後、リアルタイムクロックからRaspberry Piのソフトウェアクロックを初期化するためのネイティブサポートを備えていません自分に合ったものが見つかりました。
システム時間をRTCに保存するか、RTCで時間を読み取り、それを文字列として出力することができます。システムの起動時にこのプログラムを実行してリアルタイムクロックから時刻を取得し、文字列をset-dateコマンドに渡すPower Shellスクリプト。
詳細はこちら: http://www.codeproject.com/Articles/1113626/Adding-the-Missing-Real-Time-Clock-to-Windows-IoT
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;
}
microsoft APIリファレンスドキュメントを参照し、Windows.System名前空間では、SetSystemDateTime 方法。
しかし、あなたはそれが `で利用可能であることを知っている必要があります
dateTimeSettings静的クラスを使用できます
public static class DateTimeSettings
次に、SetSystemDateTime静的メソッドを呼び出し、Windows Iotで日付と時刻を設定するために、DateTimeOffsetタイプのオブジェクトを送信します。
public static void SetSystemDateTime(DateTimeOffset utcDateTime)
https://docs.Microsoft.com/en-us/uwp/api/windows.system.datetimesettings
プログラムでこれを行う方法を尋ねていると思いますが、起動時に実行するPSスクリプトを作成するための十分な情報を以下に示します。
Powershell経由のリモートアクセスRaspberry Pi
1.)開発PCでWindows 10 IoT Core Watcherユーティリティ(C:\ Program Files(x86)\ Microsoft IoT\WindowsIoTCoreWatcher.exe)を実行し、検出されたデバイスを右クリックして[コピー]を選択し、Raspberry Pi IPアドレスをコピーしますIPアドレス。
◦ウィンドウズの「スタート」ボタンをクリックします
◦「WindowsIoTCoreWatcher」と入力して検索結果に表示します
◦簡単にアクセスできるように、プログラム名を右クリックし、[スタートに固定]を選択してスタート画面に固定することができます。
◦Enterキーを押して実行します
◦5秒程度でデバイスがリストに表示されます。表示されない場合は、Windows 10 IoT Core Watcherを閉じて、再起動します
2.)ローカルPCで管理者PowerShellコンソールを起動します。これを行う最も簡単な方法は、Windowsのスタートメニューの近くにあるSearch the web and Windowsテキストボックスに「powershell」と入力することです。 Windowsがマシン上でPowerShellを見つけます。 Windows PowerShellエントリを右クリックして、[管理者として実行]を選択します。 PSコンソールが表示されます。
3.)リモート接続を有効にするには、デスクトップでWinRMサービスを開始する必要がある場合があります。 PSコンソールから次のコマンドを入力します。
net start WinRM
4.)PSコンソールから、次のコマンドを入力します。「」をprevにコピーしたIP値に置き換えます。
Set-Item WSMan:\localhost\Client\TrustedHosts -Value <machine-name or IP Address>
5. Yと入力し、Enterキーを押して変更を確認します。
6.これで、Windows IoT Coreデバイスとのセッションを開始できます。管理者のPSコンソールから、次のように入力します。
Enter-PSSession -ComputerName <IP Address> -Credential localhost\Administrator
7.資格情報ダイアログで、次のデフォルトパスワードを入力します。
p @ ssw0rd
注:接続プロセスは即時ではなく、最大30秒かかる場合があります。
デバイスへの接続に成功すると、プロンプトの前にデバイスのIPアドレスが表示されます。
デバイスの名前の変更と日付と時刻の設定
1.コンピュータ名を変更するには、setcomputernameユーティリティを使用します。 PowerShellで、次のコマンドを入力します。
setcomputername
2.ラボの後半でAzureに公開するために使用されるセキュリティトークンが有効になるには、Piの日付と時刻が正しい必要があります。 Piの現在のタイムゾーン設定を確認するには、次のように入力します。
tzutil/g
3.報告されたタイムゾーンが正しくない場合は、次を使用して有効なタイムゾーンのリストを見つけることができます(Powershellウィンドウのバッファーサイズを増やす必要がある場合があります)。
tzutil/l
4.タイムゾーンを設定するには、上記の手順で必要なタイムゾーンのIDを見つけて、次を使用します。
tzutil/s "Your TimeZone Name"
たとえば、「太平洋標準時」の場合
tzutil/s「太平洋標準時」
5. Raspberry Piで日付を確認するには、次のように入力します。
取得日
6.日付または時刻が正しくない場合は、Set-Dateユーティリティを使用します。
Set-Date "mm/dd/yy hh:mm:ss AM/PM"
たとえば、2016年1月3日の午後12時15分だった場合:
設定日 "01/03/16 12:15 PM"
7.変更を有効にするためにデバイスを再起動します。次のようにshutdownコマンドを使用できます。
シャットダウン/ r/t 0