Windows Server 2012 Essentials(ドメインコントローラー)で、イベントビューアーに「Failed to schedule Software Protection service…(0x80041316)」が30秒ごとに出続ける場合、原因の多くはSoftwareProtectionPlatformのスケジュールタスク破損や権限不足です。OS再インストールなしで止める手順をまとめます。
症状:Security-SPP(Software Protection)エラーが30秒ごとに大量発生する
典型的には、アプリケーションログ(Application)に次のようなイベントが繰り返し記録されます。
Failed to schedule Software Protection service for re-start at 2119-10-19T18:07:58Z. Error Code: 0x80041316
サーバー自体は動いているのに、イベントログだけが短い間隔で汚染され、運用監視や原因調査のノイズになります。さらに、Software Protection(ライセンス関連)の仕組みが「再起動予約」を作れない状態なので、放置すると別の不具合(アクティベーション関連の警告など)に発展する可能性もあります。
エラーコード 0x80041316 の意味
0x80041316 はタスク スケジューラ(Task Scheduler)のエラーで、意味は「タスクのXMLに予期しないノードが含まれている」です。つまり、タスク定義(XML)が壊れている/想定外の形式になっているときに出やすいコードです。
Software Protection service(サービス名:sppsvc)は、状況に応じて自分自身の再起動をタスクとして予約します。この予約先が、タスク スケジューラ ライブラリの Microsoft > Windows > SoftwareProtectionPlatform 配下にある SvcRestartTask 系です。ここが壊れていると、サービスが30秒周期で「予約できない」と記録し続けることがあります。
まず確認すること(最短の切り分け)
作業を始める前に、次の3点を確認します。ここで原因の大半が判別できます。
| 確認ポイント | 確認方法 | OKの目安 | NGなら |
|---|---|---|---|
| タスク スケジューラ サービス | サービス(services.msc)で「Task Scheduler」を確認 | 状態:実行中 / スタートアップ:自動 | 無効化されているなら有効化して起動 |
| Software Protection(sppsvc)の実行アカウント | services.msc → Software Protection のプロパティ | ログオン:NETWORK SERVICE | 別アカウントならNETWORK SERVICEへ戻す |
| SoftwareProtectionPlatformフォルダー権限 | C:\Windows\System32\Tasks\Microsoft\Windows\SoftwareProtectionPlatform | NETWORK SERVICEに少なくとも「読み取り」 | 権限を付与(後述の解決策B) |
上記がすべてOKでも止まらない場合、次に疑うのはタスク定義ファイル自体の破損です(解決策Aが効きやすいパターン)。
原因として多いパターン
パターン1:NETWORK SERVICE がタスク定義フォルダーを読めない/書けない
Microsoftのナレッジでも、この事象はNETWORK SERVICE の権限不足で発生し得るとされています。特に「親フォルダーには権限があるのに、SoftwareProtectionPlatformだけ継承が切れている」ケースが典型です。
また環境によっては、「読み取り」だけでは足りず、サービスが SvcRestartTask を再生成するための書き込み権限が必要になり、書き込み不足でループする例も報告されています。
パターン2:SvcRestartTask 系のタスク定義(XML)が壊れている
0x80041316 自体が「XMLが想定外」という意味なので、タスク定義ファイルが破損しているときに直撃します。タスク スケジューラを開いた瞬間に「Task SvcRestartTask: The task XML contains an unexpected node」といったポップアップが出るなら、このパターンの可能性が高いです。
原因はさまざまですが、不完全なシャットダウンや、バックアップ/復元、ハードニング作業、誤った手動編集、セキュリティ製品の巻き込みなどでタスク定義が壊れることがあります。
パターン3:タスク スケジューラが無効化されている/SPPが別アカウントで動いている
頻度は高くありませんが、そもそも Task Scheduler サービスが停止・無効だと予約はできません。また、Software Protection Platform サービスが NETWORK SERVICE 以外で動作している場合も動作が崩れます。
結論:直し方は「タスクを復元して作り直す」か「権限を戻す」
この問題は、原因がタスク定義に集中しているため、実務上は次のどちらかで解決することがほとんどです。
| 対処 | 効きやすい状況 | メリット | 注意点 |
|---|---|---|---|
| 解決策A:タスクを復元して再作成 | 0x80041316(XML破損)っぽい/Task Schedulerにエラーが出る | 根本修正になりやすい | 作業手順がやや多い(DCは特にバックアップ必須) |
| 解決策B:NETWORK SERVICE 権限を修正 | 権限不足が疑わしい(継承切れ/読み取り不足/書き込み不足) | 手早く直ることがある | むやみにフルコントロール付与はしない |
解決策A:SoftwareProtectionPlatform のタスクを“復元して再作成”する(推奨)
0x80041316 は XML破損の意味なので、壊れたタスクを退避して、正しい定義を取り込み直すのが最も確実です。Microsoft Q&Aでも、Windows Server 2012 Essentials のDC環境で同様にこの手順が案内されています。
作業前:DC(ドメインコントローラー)としての安全策
- 必ずバックアップ:最低でもシステム状態(System State)を含むバックアップを取得してから実施してください。
- 可能ならメンテナンス時間帯に実施し、作業中は不要な再起動や強制終了を避けます。
- 仮想環境でも、DCのスナップショット運用は設計次第で事故要因になります。バックアップ方針に従ってください。
手順1:Software Protection(sppsvc)を停止
管理者のコマンドプロンプトで実行します。
net stop sppsvc
手順2:タスク定義ファイルを「削除せず退避(リネーム)」する
対象フォルダーはここです(ここを間違えると直りません)。
C:\Windows\System32\Tasks\Microsoft\Windows\SoftwareProtectionPlatform\
まずはバックアップ用にフォルダーを作り、壊れている可能性のあるファイルを削除ではなくリネームします。
mkdir C:\Temp\SPPTaskBackup
ren "C:\Windows\System32\Tasks\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" "SvcRestartTask.bak"
ren "C:\Windows\System32\Tasks\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTaskLogon" "SvcRestartTaskLogon.bak"
ren "C:\Windows\System32\Tasks\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTaskNetwork" "SvcRestartTaskNetwork.bak"
上記3つは、多くの環境で SoftwareProtectionPlatform 配下に存在する代表的なタスクです。
手順3:正常なタスク定義を入手する(おすすめ順)
| 入手元 | メリット | 注意点 |
|---|---|---|
| 同じOS/同じ更新レベルの別マシンからコピー | 最も安全(差分が出にくい) | 同一世代/同一言語のOSが必要 |
| インストールメディア(install.wim)から抽出 | 手元にメディアがあれば再現しやすい | WIMのインデックス選択が必要 |
| バックアップから対象ファイルだけ復元 | 実環境と一致しやすい | 復元方法が製品次第 |
(例)install.wim からタスクを取り出す
インストールISO(またはDVD)の sources\install.wim からタスク定義を抽出できます。次の例では D: がメディア、C:\Mount にマウントします(読み取り専用)。
mkdir C:\Mount
dism /Get-WimInfo /WimFile:D:\sources\install.wim
dism /Mount-Wim /WimFile:D:\sources\install.wim /Index:1 /MountDir:C:\Mount /ReadOnly
mkdir C:\Temp\SPPTaskSource
copy "C:\Mount\Windows\System32\Tasks\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" "C:\Temp\SPPTaskSource\SvcRestartTask"
copy "C:\Mount\Windows\System32\Tasks\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTaskLogon" "C:\Temp\SPPTaskSource\SvcRestartTaskLogon"
copy "C:\Mount\Windows\System32\Tasks\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTaskNetwork" "C:\Temp\SPPTaskSource\SvcRestartTaskNetwork"
dism /Unmount-Wim /MountDir:C:\Mount /Discard
手順4:取り出したタスクを XML としてインポートする(schtasks推奨)
タスクファイルは拡張子がなくても中身はXMLです。インポートしやすいように、いったん .xml を付けます。
copy "C:\Temp\SPPTaskSource\SvcRestartTask" "C:\Temp\SPPTaskSource\SvcRestartTask.xml"
copy "C:\Temp\SPPTaskSource\SvcRestartTaskLogon" "C:\Temp\SPPTaskSource\SvcRestartTaskLogon.xml"
copy "C:\Temp\SPPTaskSource\SvcRestartTaskNetwork" "C:\Temp\SPPTaskSource\SvcRestartTaskNetwork.xml"
次に、タスク名(TN)を正しいパスで作成します。
schtasks /Create /TN "\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" /XML "C:\Temp\SPPTaskSource\SvcRestartTask.xml" /F
schtasks /Create /TN "\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTaskLogon" /XML "C:\Temp\SPPTaskSource\SvcRestartTaskLogon.xml" /F
schtasks /Create /TN "\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTaskNetwork" /XML "C:\Temp\SPPTaskSource\SvcRestartTaskNetwork.xml" /F
GUIで行う場合は、タスク スケジューラで「Task Scheduler Library > Microsoft > Windows > SoftwareProtectionPlatform」を右クリックして「タスクのインポート」でも同じです。
手順5:sppsvc を開始して、タスクが動くか確認
net start sppsvc
続けて、タスクが存在するか・エラーなく実行できるかを確認します。
schtasks /Query /TN "\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" /V /FO LIST
schtasks /Query /TN "\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTaskLogon" /V /FO LIST
schtasks /Query /TN "\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTaskNetwork" /V /FO LIST
「最終実行結果」が 0x0 など正常値になり、イベントビューアーで30秒ごとのエラーが止まれば成功です。
解決策Aでハマりやすいポイント
- 同一OSの定義を使う:Server 2012 / 2012 R2、Essentialsなど、世代が違うXMLを流用すると0x80041316の再発要因になります。
- 親フォルダーをいじらない:
C:\Windows\System32\Tasks\Microsoft\Windows全体を変更すると、別の標準タスクに波及します。対象はSoftwareProtectionPlatform配下に限定します。 - 削除ではなく退避:復元が必要になったときに戻せるよう、.bakで残します。
解決策B:NETWORK SERVICE に必要な権限を付与して「タスクを作り直せる」状態に戻す
MicrosoftのKBでは、この問題が「NETWORK SERVICE の権限不足」で起きるケースを挙げ、SoftwareProtectionPlatformフォルダーに対してNETWORK SERVICEが少なくとも読み取りできることを確認するよう案内しています。
実運用では、読み取りに加えて「タスクを再生成するための書き込み」が必要になる場合もあるため、状況に応じて最小限の権限を付与します。
GUIで付与する手順(権限の継承切れも確認)
- エクスプローラーで次を開く:
C:\Windows\System32\Tasks\Microsoft\Windows\SoftwareProtectionPlatform - フォルダーを右クリック → プロパティ → セキュリティ
- NETWORK SERVICE が存在するか、存在する場合は「読み取り」「読み取りと実行」があるか確認
- 存在しない/不足している場合は追加して付与
- 「詳細設定」で、継承が無効になっていないかも確認(無効なら、意図がなければ継承を有効化)
コマンドで付与する手順(icacls)
GUIが使いづらい場合は icacls でも設定できます。まず現在のACLを控えます。
icacls "C:\Windows\System32\Tasks\Microsoft\Windows\SoftwareProtectionPlatform"
次に、NETWORK SERVICE に「読み取り(RX)」を付与する例です(まずはここからが安全)。
icacls "C:\Windows\System32\Tasks\Microsoft\Windows\SoftwareProtectionPlatform" /grant "NT AUTHORITY\NETWORK SERVICE:(OI)(CI)RX"
それでもタスクの再生成ができない/エラーが止まらない場合、一時的に変更(M)を付与して再生成させ、改善後に権限を見直すという手もあります。
icacls "C:\Windows\System32\Tasks\Microsoft\Windows\SoftwareProtectionPlatform" /grant "NT AUTHORITY\NETWORK SERVICE:(OI)(CI)M"
権限を変更したら、念のため sppsvc を再起動します。
net stop sppsvc
net start sppsvc
作業後の確認ポイント(ログが止まったかを“定量的”に見る)
「なんとなく止まった気がする」ではなく、次の観点で確認すると再発時の切り分けが速くなります。
| 確認項目 | 確認方法 | 期待する結果 |
|---|---|---|
| エラー連発が止まったか | イベントビューアー(Application)で Security-SPP を確認 | 30秒ごとの同一エラーが出ない |
| タスクの存在 | Task Scheduler Library > Microsoft > Windows > SoftwareProtectionPlatform | SvcRestartTask 系が存在(必要なら「非表示のタスクを表示」) |
| タスクが正常実行できるか | schtasks /Query ... /V | 最終実行結果が 0x0 など正常 |
補助的に、Task Scheduler の「Operational」ログ(Microsoft-Windows-TaskScheduler/Operational)も見ると、XML読み込み失敗や権限エラーの痕跡が残っていることがあります。
それでも止まらない場合の追加チェック
システムファイル破損の確認(SFC / DISM)
タスク定義だけでなく、関連コンポーネントが壊れている場合は OS 標準の整合性チェックも有効です。
sfc /scannow
DISM の修復は環境によってはソース指定が必要です(Server 2012 世代は特に)。まずは結果を見てから判断してください。
「タスクを無効化して黙らせる」はおすすめしない
エラーを止めるだけならタスク無効化で沈黙することもありますが、Software Protection Platform の仕組みを壊す方向なので、長期運用ではおすすめしません。あくまで標準状態へ戻す(復元・再作成、権限修正)が安全です。
Server 2012 Essentials は延命より“移行計画”も検討
この手のエラーは「今すぐ止めたい」問題ですが、Windows Server 2012 系はサポート面でも制約が増えています。ドメインコントローラーの役割分離や、後継OSへの移行計画も並行して検討しておくと、将来の障害対応コストを下げられます。
よくある質問
なぜ 2119 年など未来の日付が表示されるのですか?
このメッセージに出る時刻は、Software Protection が「再起動予約」を入れようとした内部値が表示されているだけで、必ずしもサーバーの時刻設定が 2119 年になっているわけではありません。まずは時刻同期を疑うより、タスク定義(XML)や権限を優先して確認するのが近道です。
タスクファイルは削除しても大丈夫ですか?
削除よりリネーム退避を推奨します。標準タスクはOSの部品なので、誤って別タスクを消すと副作用が出ます。退避しておけば、元に戻したくなったときに復旧しやすくなります。
DC(ドメインコントローラー)でも作業して問題ありませんか?
タスク復元自体はOS標準構成を戻す作業なので、手順を守れば過度に怖がる必要はありません。ただしDCは再インストールが難しいため、バックアップ取得と変更範囲の限定(SoftwareProtectionPlatform配下のみ)が重要です。
まとめ
Windows Server 2012 Essentials で「Software Protection service の再起動タスクをスケジュールできない(0x80041316)」が30秒ごとに出続ける場合、原因はほぼSoftwareProtectionPlatform のタスク定義(SvcRestartTask 系)の破損か、NETWORK SERVICE の権限不足に集約されます。まずは KB に沿ってサービス状態・実行アカウント・フォルダー権限を確認し、それでも止まらなければタスクを退避して復元(再作成)するのが現実的な解決策です。

コメント