Emacs
Windows
Cygwin
Windows10
gnupack

Windows10のユーザフォルダ名変更後の参照エラー

Markdownの練習と作業ログも兼ねて初めて記録を残してみる。

概要
Win10でユーザフォルダ名を変更すると一部の古い(?)ソフトウェアが動作しなくなった。
ユーザフォルダ直下のリンクの情報を修正すれば解決する模様。

前提

  • Windows 10 (64bit)
  • (直接関係ないけど)gnupack_devel-13.06-2015.11.08
  • C\Users直下のユーザフォルダ名を変更した

経緯 - ユーザフォルダ名の変更

普段“noriben”というユーザ名を愛用している(仮名)のだが、Win10のユーザーフォルダが“norib”
とかいう中途半端な名前にされてしまっていた。

モヤモヤするので、こちらの記事を参考にユーザフォルダ名の変更作業を行った。
「手順2」に従い、アカウントを追加することなくフォルダ名の変更を行った。

Windows10のユーザーフォルダ名変更 - @aaaKUKIaaa
https://qiita.com/aaaKUKIaaa/items/83d6234b69b0d958d3f1

追加作業として、念のためレジストリの関連項目を一括修正した。
適当なソフト(Registry Finder等)でnorib\ -> noriben\でキー・値を一括replaceした。
C:\Users\norib\だと取りこぼしがあるので注意)

課題 - emacsとcygwin(gnupack)が起動しない

当方emacs派なのでCygwinもセットで導入すべくgnupackを愛用しているのだが、
この両方が起動しなくなった。

start_emacs.exe(start_cygwin.exe)を起動すると以下のような警告が出た。
fontcacheはgnupackの各種ソフトで読み込むフォント(Migu 1Mとか)が置かれるフォルダ(らしい)。

errorlog.PNG

原因 - Local Settingsの参照先情報が古い

Local Settingsは何処へ

エラー文に従いフォルダfontcacheの在処を見に行こうと試みるも、ユーザフォルダ以下にLocal Settingsが無い。

filelist.PNG

他アカウントのユーザフォルダでもLocal Settingsは見つからないので、コマンドプロンプトでdir /aしてみた。

:\Users\noriben>dir /a
 ドライブ C のボリューム ラベルは OS です
 ボリューム シリアル番号は hoge-fuga です

 C:\Users\noriben のディレクトリ

2018/05/06  10:30    <DIR>          .
2018/05/06  10:30    <DIR>          ..
(略)
2017/12/29  16:20    <DIR>          AppData
(略)
2018/05/06  10:30    <JUNCTION>     Local Settings [C:\Users\norib\AppData\Local]
(略)
               8 個のファイル           x,xxx,xxx バイト
              34 個のディレクトリ  xxx,xxx,xxx,xxx バイトの空き領域

C\Users\[username]\AppData\LocalへのリンクとしてLocal Settingsが貼られているが、
その参照先がC\Users\norib以下となっている。
もちろん[username]noribenに変わっているので、fontcacheが参照不可となっていた。

ジャンクションリンク

調べてみると、C\Users\[username]\Local SettingsというのはWin7時代に使われていた場所で、
Win10ではC\Users\[username]\AppData\Localがそれに相当するらしい。
当然Win7対応ソフトは前者を参照するので、Win10では前者から後者へのリンクを貼ることで
互換性対策が為されているものと想像できる。

それはともかく、このリンクは「ジャンクションリンク」と呼ばれるもので、ハードリンクや
シンボリックリンクとはまた別物。詳細は自分の説明よりも以下をご参照。

Tech TIPS:Windowsのシンボリックリンクとジャンクションとハードリンクの違い - 打越浩幸
http://www.atmarkit.co.jp/ait/articles/1306/07/news111.html

ジャンクションリンクはコマンドプロンプトから貼ることができる。
mklinkコマンドに/Jオプションを付ければよい。

> mklink /J [リンク名] [リンク先のパス]

対応 - ジャンクションリンクの貼り直し

Local Settingsのジャンクションリンクを一旦rmdirコマンドで削除し、貼り直す。

> cd C:\Users\noriben
> rmdir "Local Settings"
> mklink /J "Local Settings" C:\Users\noriben\AppData\Local

結果 - 復活

startup_emacs.exe及びstartup_cygwin.exeが両方とも無事に起動するようになった。

余談1

実際にユーザフォルダでdir /aすると、他にもジャンクションリンクが貼られていることが分かる。
こいつらを貼りなおせば、上記参照記事で言及されていた一部の問題も解決するかも?(未検証)

1. iTunesの楽曲がすべて吹っ飛んだ → "Application Data"?
2.「最近表示したファイル」的なのが揃いも揃ってみんなだめ → "Recent"?

余談2

貼り直したリンクはエクスプローラー上でも思いっきり見えている。

newfile.PNG

まとめ

ユーザフォルダ上には色々とジャンクションリンクが貼られている。
やむを得ない理由でユーザフォルダ名を変更したら、リンクの情報も併せて更新するべし。