2015/04/01

Windows IconCache.dbを削除してもショートカット アイコンが正しく表示されない

Windows 7のショートカット アイコンが正しく割当されない現象が発生、その時に対処した内容をメモします。
尚、一般的な対処法の「IconCache.dbを削除する」では改善しませんでした。

現象

64ビット版Windows 7 Professional SP1の環境において、「ショートカット アイコンが白くなる」現象に遭遇しました。
image
一つは、Shell32.dllの0番のアイコンですが、もう一つは分かりません。

この現象が確認されたショートカットの保存先は、
  • スタート メニュー
    C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu
  • タスクバー
    C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
  • すべてのプログラム(ショーカットの保存先)C:\ProgramData\Microsoft\Windows\Start Menu\Programs\<プログラム名>
でした。
image

対処法

今回の場合は、手動でショートカットを再作成する事で対処しました。
  1. 問題のショートカット アイコンの場所と名前をメモ
  2. 同ショートカット アイコンを削除
  3. 実行ファイルを探し、ショートカットを作成
    ※デスクトップに作成されます
  4. ショートカットの名前を#1に変更
  5. #4のショートカット アイコンを各場所にコピー&ペーストする
結果、無事アイコンが正しく表示されました。
image

PowerShell でショートカットを作成する

手動でショートカットを作成する事は面倒ではありませんが、PowerShellを使ってショートカット アイコンを作成してみました。
残念ながら、ショートカットを作成するPowerShell コマンドレットはないのでWScriptを使用します。
サンプルは、Visudal Studio 2013のショートカットをデスクトップに作成します。
$AppLocation = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe"
$WshShell = New-Object -ComObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$HOME\Desktop\Visual Studio 2013.lnk")
$Shortcut.TargetPath = $AppLocation
$Shortcut.WorkingDirectory = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE"
$Shortcut.Save()

ショートカット アイコンを作成後は、ショートカットの保存先(スタートメニューやタスクバー等)へ手動でコピーします。

悩み多き文教市場のインフラ屋さん」さんのブログ記事「スタートメニューにアプリケーションを固定する (その3)」のテクニックを使う事も出来ますが、今回は自分のローカル ユーザーのみ、かつ、ショートカットは数個作成するだけなので手動で処理した方が低コストです。

しかし、数十台のWindows クライアントをセットアップしインストールするアプリケーションが全台同一であれば「悩み多き文教市場のインフラ屋さん」の記事は非常に助かります。
大量セットアップをする機会はありませんが、いつかやってみたいですね。
余談:IconCache.dbを削除する
PowerShellからIconCache.dbを削除したい場合は、下記スクリプトを実行します。
#パス設定
$p = "$HOME\AppData\Local"
#ファイルの存在チェック
Get-ChildItem "$p\IconCache.db" -Hidden
#ファイルを削除
Remove-Item "$p\IconCache.db" -Force
#再起動
Restart-Computer
スポンサーリンク

スポンサーリンク