OfficeClickToRun.exeで障害が発生して、Officeアプリケーションが強制終了してしまう

Microsoft Excelで特定のファイルを開いたときに、Excelが何のメッセージも出さずに終了指定しまう現象が発生しました。イベントログを確認してみるとアプリケーションにはOfficeClickToRun.exeのアプリケーションエラーが、システムにはMicrosoft Office ClickToRun Serviceが不正終了したエラーが残されていました。

アプリケーションイベントログ

障害が発生しているアプリケーション名: OfficeClickToRun.exe、バージョン: 15.0.4641.1002、タイム スタンプ: 0x53db083a
障害が発生しているモジュール名: unknown、バージョン: 0.0.0.0、タイム スタンプ: 0x00000000
例外コード: 0xc0000005
障害オフセット: 0x00000000
障害が発生しているプロセス ID: 0x1db8
障害が発生しているアプリケーションの開始時刻: 0x01d23f9ff27ee023
障害が発生しているアプリケーション パス: C:\Program Files\Microsoft Office 15\ClientX86\OfficeClickToRun.exe
障害が発生しているモジュール パス: unknown

ClickToRunはOfficeの標準ではインストールされない機能を、必要になったときに非同期的にインストールする機能です。原因はわかりませんが標準ではインストールされない機能を用いたExcelファイルを開こうとすると、ClickToRun Serviceが差分機能のインストールを行おうとして、落ちているのではないかと推測されます。

幸いなことにOfficeの修復インストールを行う事で直りました。Officeの修復インストールの時にはプロダクトIDを求められる場合があるので、事前に用意しておきましょう。

Windowsのファイル共有でEvryoneからのアクセスを許可する

ファイル共有をかけるとき、Everyone(誰でもアクセス可能)にするには、以下の4ヶ所の設定が必要です。

ファイルのアクセス権設定でEvryoneを許可する

フォルダのプロパティを開きセキュリティタブにある編集ボタンを押して、アクセス許可の画面を開く。アクセス許可の画面で追加ボタンを押して、Everyoneアカウントにフルコントロール権限を与える。

ファイル共有のアクセス件設定でEvryoneを許可する

フォルダのプロパティを開き、共有タブにある詳細な共有ボタンを押して、詳細な共有の画面を開く。「このフォルダを共有する」をチェックして、アクセス許可ボタンを押し、Everyoneアカウントにフルコントロールの権限を与える

Guestアカウントを有効にする

Guestアカウントは初期状態では無効にされている。「コンピューターの管理」を開き「システムツール→ローカルユーザーとグループ→ユーザー」にあるGuestアカウントのプロパティを開き「アカウントを無効にする」のチェックを外す。

セキュリティポリシーでGuestsの接続を許可する

「ローカルセキュリティポリシー」を開き「ローカルポリシー→ユーザー権利の割当」の「ネットワーク経由のアクセスを拒否」にGuestアカウントが登録されている。アクセス権設定は「拒否」の設定が優先される。このままだとGuestアカウントでのネットワーク接続に失敗するので、Guestアカウントを拒否リストから削除しておく。

Windows 7やWindows 10はサーバー用途で使うことを異図していません。20セッションを超えると接続エラーとなるので注意しましょう。

複数のゲートウェイが登録されてインターネットに接続出来ない

ゲートウェイの設定を変えたところ、ネットワークに繋がらなくなった。しばらく原因が分からず、再起動を繰り返しながら悩んでいた。

ふとipconfigを実行してみると、デフォルトゲートウェイが0.0.0.0と192.168.xxx.xxxの2つ登録されている。

実際に行う機械は殆ど無いが、アダプターの設定の変更からインターネットバージョン4のプロパティを開き、詳細設定のボタンを開くと複数のデフォルトゲートウェイの設定をすることが出来る。しかしながら、実際にひらいてみると192.168.xxx.xxx一つだけがデフォルトゲートウェアに登録されていて、0.0.0.0は見当たらない。

route delete 0.0.0.0 /p


上のようなコマンドを実行したところ、無事に複数のデフォルトゲートウェイが削除できた。あらためてアダプターの設定の変更からインターネットバージョン4のプロパティを開きデフォルトゲートウェイを開くと正常に動作するようになった。

Windows UpdateでKB3139398の適用に繰り返し失敗する

Windows UpdateのログはC:\Windows\Logs\CBS\CBS.LOGに保存されているのでErrorとなっている場所を検索してみます。

2016-11-08 03:10:52, Info CBS Perf: Doqe: Install started.
2016-11-08 03:10:52, Info CBS Doqe: [Forward] Installing driver updates, Count 5
2016-11-08 03:10:52, Info CBS INSTALL index: 0, phase: 1, result 0, inf: usb.inf
2016-11-08 03:10:52, Info CBS INSTALL index: 1, phase: 1, result 0, inf: usbport.inf
2016-11-08 03:10:52, Info CBS INSTALL index: 2, phase: 1, result 0, inf: tpm.inf
2016-11-08 03:10:52, Info CBS INSTALL index: 3, phase: 1, result 0, inf: disk.inf
2016-11-08 03:10:52, Info CBS INSTALL index: 4, phase: 1, result 5, inf: usbstor.inf
2016-11-08 03:10:52, Info CBS Progress: UI message updated. Operation type: Update. Stage: 1 out of 1. Percent progress: 9.
2016-11-08 03:10:52, Info CBS DriverUpdateInstallUpdates failed [HRESULT = 0x80070005 - E_ACCESSDENIED]
2016-11-08 03:10:52, Error CBS Doqe: Failed installing driver updates [HRESULT = 0x80070005 - E_ACCESSDENIED]
2016-11-08 03:10:52, Info CBS Perf: Doqe: Install ended.
2016-11-08 03:10:52, Info CBS Failed installing driver updates [HRESULT = 0x80070005 - E_ACCESSDENIED]
2016-11-08 03:10:52, Error CBS Shtd: Failed while processing non-critical driver operations queue. [HRESULT = 0x80070005 - E_ACCESSDENIED]
<<中略>>
2016-11-08 03:12:31, Info CSI 0000000b Creating NT transaction (seq 1), objectname [6]"(null)"
2016-11-08 03:12:31, Info CSI 0000000c Created NT transaction (seq 1) result 0x00000000, handle @0x414
2016-11-08 03:12:32, Info CSI 0000000d@2016/11/7:18:12:32.241 CSI perf trace:
CSIPERF:TXCOMMIT;1222683
2016-11-08 03:12:32, Error CBS Doqe: Marked package Package_1_for_KB3139398~31bf3856ad364e35~x86~~6.1.1.1 as failed. [HRESULT = 0x00000000 - S_OK]
2016-11-08 03:12:32, Info CBS Clearing HangDetect value

「Doqe: Failed installing driver updates [HRESULT = 0x80070005 – E_ACCESSDENIED]」とあり、E_ACCESSDENIED(アクセス件がありません)というエラーで終わっていることが分かります。さらに手前の行を追っていく「Info CBS INSTALL index: 4, phase: 1, result 5, inf: usbstor.inf」と、usbstor.infのINSTALLのresultコードが5になっており正常に終了していません。

C:\Windows\usbstor.infのプロパティを開きセキュリティタブのアクセス権を開いてみると・・・SYSTEMとAdministratorsのアクセスを拒否する設定になっていました。アクセス権の拒否のチェックを外してあげると・・・正常に更新する事ができました。

Windows10のWindowsUpdateでKB3197954が繰り返しエラーとなる

ずっとWindows10にてWindows Updateに失敗が続くので、未適用も増えている対応することにした。C:\Windows\Logs\CBS\CBS.LOGを確認してみるとKB3197954でエラーが発生している。

Google等で検索してみると、WindowsUpdateのサイズが大きいために途中でエラーとなってしまい終わらないことがあるとの情報を見つける。そこでWindows Download CenterからKB3197954をダウンロードしてインストールを試みた。しかし残念ながら進捗が60%ぐらいまで進んだ後、遅々として終わらず、OSを強制的に再起動する。

過去のWindowsUpdateに失敗している可能性もあるが、ロールアップパッケージとなってしまったが故に原因の特定が難しい。以前なら修正される内容から、関連しそうな過去のUpdateにあたりを付けてアンインストールできたのだが、ロールアップパッケージとなったためにそれは出来ない。となると、過去のWindowsUpdateで適用したものを順に消してみるしかない。

スタートメニューから「設定→更新とセキュリティ→Windows Update→更新の履歴→更新プログラムをアンインストールする」に進んでみると、なんとKB3197954がインストール済み更新プログラム一覧の中に載っている。どうやらKB3197954のインストールが正常に完了していないために、KB3197954を繰り返し検出してはエラーとなっていたようだ。

KB3197954をアンインストールした後、あらためて先ほどダウンロードしたKB3197954をインストルしたところ今度は正常に完了。その後のWindows Updateでも問題は発生していないので、大丈夫そうです。

セキュリティおよび品質ロールアップのプレビューって何?

WSUSでWindows Updateの承認操作をおこなっていたところ、「セキュリティおよび品質ロールアップのプレビュー」とあって固まる。プっ・・・プレビュー?βなの?テストなの?入れて良いの?と逡巡した。

要は来月の「セキュリティおよび品質ロールアップ」で提供する予定の「品質ロールアップ」のうち、既に利用可能な物を先行配信するので使いたい方はどうぞっって事らしい。あくまで品質に係わる部分だけで、セキュリティに係わる部分は含まないようだ。

ドッグフードテスト担当部署には配信して、それ以外は止めておくのが良いのかな。

参照:Windows 7 および Windows 8.1 のサービス モデル変更についての追加情報

グループポリシーから、Windows7のリモートデスクトップに、ドメインユーザーの接続を許可する

Windows 7のリモートデスクトップを有効にして、ドメインユーザーがログインを許可するには次のようにグループポリシーで設定します。

まずリモートデスクトップサービスを有効にするため、グループポリシーの以下の項目を設定します。

  • 「コンピューターの構成/ポリシー/管理用テンプレート/Windows コンポーネント/リモート デスクトップ サービス/リモート デスクトップ セッション ホスト/セキュリティ」にある「リモート接続にネットワーク レベル認証を使用したユーザー認証を必要とする」を有効にする。
  • 「コンピューターの構成/ポリシー/管理用テンプレート/Windows コンポーネント/リモート デスクトップ サービス/リモート デスクトップ セッション ホスト/接続」にある「ユーザーがリモート デスクトップ サービスを使ってリモート接続することを許可する」を有効にする。
  • 「コンピューターの構成/ポリシー/Windows の設定/セキュリティの設定/システム サービス」にある「Remote Desktop Services」を自動にする。

これだけだとドメインユーザーではリモートデスクトップではログイン出来ません。ドメインユーザーがリモートデスクチップ経由でログイン出来るようにするには、クライアントPCのRemote Desktop Usersローカルグループにドメインのユーザーを追加しておく必要があります。

「コンピューターの構成/ポリシー/Windows の設定/セキュリティの設定/ローカル ポリシー/ユーザー権利の割り当て」にある「リモート デスクトップ サービスを使ったログオンを許可」を設定すれば接続出来るように思うかもしれませんが、実際に設定してもログインする事は出来ません。あくまでRemote Desktop Usersローカルグループに追加する必要があるようです。

グループポリシーのローカルアカウント設定ではBuiltin Groupへのユーザー追加は行えないので、ログインスクリプトからnet localgroupでユーザーの追加を行うことになります。

以下のようなバッチファイルをスタートアップスクリプトに登録します。

net localgroup "Remote Desktop Users" [ドメイン名]\[ユーザーID] /ADD

 

Windows Live MailからOutlook 2013以降へのデータ移行

Windows Essentialsのサポート終了に伴いWindows Live Mailも使うことが出来なくなります。Windows LiveMailからMicrosoft Oiifceに付属するOutlookへのデータ移行の手順です。

メールデータを移行する詳細な手順は下のURLを参照して下さい。Outlook 2010となっていますが、Outlook 2013以降でも同様の手順でメールデータを移行できます。
Windows Live メールから Outlook 2010 または Outlook 2007 にメッセージを移行する方法
ただし、若干わかりにくいところがあるので、実際に発生したトラブルも踏まえて補足しておきます。

Outlook 2013を起動した状態で、Windows LiveMailからのエクスポートを行います。Outlook 2013を終了した状態だと上手く動作しない恐れがあります。

メッセージのエクスポートの時に「全てのフォルダー」だと正常に動作せず、ゴミ箱をエクスポートした時点で止まってしまいました。「選択されたフォルダー」を選び、移行するフォルダーを指示した方が良さそうです。

住所録を移行する手順は下記のURLを参照して下さい。特に問題は無いと思います。
Windows Live メールの電子メール、連絡先、および予定表のデータを Outlook にエクスポートする

UI Automation PowerShell Extensionsを使ってみる

単票入力画面で入力効率アップのための工夫が一切無く、ほぼ同じ内容を何度も入力するという非人間的な作業に追われている事務担当者というのは、私以外にも結構居るかと思う。清く正しいエンジニア兼業事務担当者としては、ここは自動化すべきだろう。というわけで、PowerShellとUI Automation PowerShell Extensionsを使って作業の自動化を試みるよ。

UI Automation PowerShell ExtensionsはVisual Studioで開発されたアプリケーション画面のテストを自動化するために提供されているMicrosoft UI AutomationをPowerShellから呼び出せるようにしたものです。

UI Automation PowerShell Extensionsには残念な制約があって、Powershell Version 2.0でないと動きません。もしより高いバージョンのPowershellが既にインストールされている場合は”powershell -version 2″とコマンドライン引数を指定して、低いバージョンで起動する必要があります。また動作には管理者権限が必要です。管理者権限を持つユーザーでログインするのは当然として、UACを有効にしている場合は「管理者として実行」を選択する必要があります。

まずはUI Automation PowerShell ExtensionsからUIAutomation.x.x.xxx.NET35.zipをダウンロードします。ダウンロードしたZIPファイルに含まれているファイルを適当なフォルダに解凍します。ここでは「C:\Program Files\WindowsPowerShell\Modules」に「UIAutomation」というフォルダを作ってそこに解凍することにします。

とりあえずコマンドプロンプトからメモ帳を起動して実験してみましょう。

PS C:\Windows\system32> Import-Module "C:\Program Files\WindowsPowerShell\Modules\UIAutomation\UIAutomation.dll"
PS C:\Windows\system32> notepad
PS C:\Windows\system32> $window = Get-UiaWindow -Name '無題 - メモ帳'
PS C:\Windows\system32> $window.Keyboard.TypeText("Hello UI Automation")

メモ帳を起動して適当な文字列を入力することが出来ました。
notepad-sample

実際にScriptを作るにはUIAutomationSpy.exeと言うプログラムが付属しています。これを起動して一連の操作を行うと、その操作をScriptに保存する事が出来ます。
UIAutomation
UIAutomationSpy.exeを起動してStartボタンをクリックした後、Scriptにしたい一連の操作を実施し、Stopボタンをクリックします。Scriptタブに移動すると先ほどの操作を再現するためのScriptが生成されています。これをテキストエディタに張り付けて、Powershell Scriptとして保存します・・・が、この自動生成されるScriptはかなり汚いので実際に利用の際には大幅に修正する事になります。例えば先ほどのメモ帳に入力するサンプルも自動生成したScriptだとこうなります。

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'H'

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hell'

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello '

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello U'

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello UI A'

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello UI Au'

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello UI Automati'

Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | `
Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello UI Automation'

・・・(´・ω・`)
「AutomationId」とかClassを調べるためのツールと割り切った方が良さそうですね。

Windows Server 2012R2にSharePoint 2013をインストールすると「.NET Framework 4.5がインストールされていない」とエラーになる

Windows Server 2012R2にSharePoint 2013 Foundationをインストールしようとすると、.NET Framework 4.5がインストール済みにもかかわらず、.NET Framework 4.5がインストールされていない旨のメッセージが表示され、インストールを継続できない。これはWindows Updateで適用された.NET Framework 4.6等より新しいバージョンの.NET Frameworkがインストールされている場合に、正常に環境を認識できないためにおこる。
この現象はSharePointに限らず、.NET Framework 4.5を使用するソフトウェアのインストールで広く発生するらしい。
解決のためには「コントロールパネル→プログラムと機能→インストールされた更新プログラム」から、NET Framewrok 4.6に相当するKB3045563、4.5.2に相当するKB2901907、4.5.1に相当するKB2859818をアンインストールする。
アンインストールした後にSharePoint 2013 Foundationのインストールを行い、その後にあらためてWindows Updateの適用を行い.NET Framework 4.6のインストールを行えばよい。
参考:
SharePoint 2013 Setup error if the .NET Framework 4.6 is installed
.NET Framework 4.6 がインストールされた環境でWindows SDK for Windows 7 and .NET Framework 4 の Visual C++ Compilers がインストールできない