Windows7におけるMATLABバージョン混在法
最近ずっと超絶忙しいです。。。いつになったら平常にもどるのだろう。。。というわけで、今回も小ネタを。
MATLABは、1年に2つもリリースされます。できれば混在させておきたいところですね。実際、XPの頃は、全然問題なく混在できていました。
ところが、Windows7ではうまくバージョン混在できないケースがあります。それは、MATLABパス設定です。MATLABの各バージョンにおいて、なぜかパス設定が共通になってしまう場合があります。これはもう、大迷惑!
R2010aはR2010a、R2010bはR2010bと、各バージョンのMATLABは極力独立させておきたいのが人情というもの。
そこで、なぜこのようなことが起きてしまうのか?についてご説明したあとで、どうやったら回避できるのか?についてご提案します。
どうしてこうなるの?
(ご興味のない方は、こちらは飛ばしてください。)
MATLABのパス情報は、pathdef.m というMスクリプトに保存されています。問題は、このpathdef.mの保存位置です。
MATLABでは伝統的に、Program Filesの下の、MATLAB/R2010b/toolbox/local の中に保存されます。
c:\program files\MATLAB\R2010b\toolbox\local\pathdef.m
Program Filesの下っていうところがミソです。もしも、アプリケーションがProgram Filesの中身をいじりたい放題だったら・・・セキュリティ的にかなりマズい事になりますよね。
そのため、Windows7では、アプリケーションが勝手にProgram Filesの中身をいじれないようになっています。
さぁ困った。という事で最近のMATLABでは、pathdef.mをProgram Filesの外にも保存できるようになっています。その代表的な場所が、マイドキュメントの下のMATLABフォルダです。
マイドキュメントの下の「MATLAB」フォルダ
これで、Program Filesの中身をいじらなくても良くなりました。しかしその代わり、マイドキュメント / MATLAB フォルダは、最近のMATLABが共通して使用しています。これがいけないんですね。
じゃあMATLABのバージョン毎に、違うフォルダにpathdef.mを保存したらいいじゃないか!と思うのですが、そうもいきません。なぜなら、MATLABは起動時のカレントディレクトリにある pathdef.m しか読んでくれないからです。困りましたね。。。
回避方法その1:ちょっとゴーイン
私は、この方法を使用しています。やり方はとってもカンタン。MATLABを起動する際に、「管理者として実行」するだけです。
右クリックして、「管理者として実行」をクリックする
そうすると、MATLABはProgram Files以下のファイルにも書き込み放題になります。
そのため、パス設定の結果は、MATLAB/MATLABのリリース名/toolbox/local/pathdef.m に保存されます。
MATLABのバージョン毎に別々のpathdef.mがあって、それぞれ別々に書き込まれるため、バージョンの混在が出来ます。XPでは、こういう状態で混在しているわけですが、Windows7でもムリヤリそうしてやろう、というわけです。
回避方法その2:セキュリティにも配慮
回避方法その1を見て、オイオイと思われた方もいらっしゃることでしょう。せっかくのWindows7のセキュリティ機能が台無しじゃないか!と。
そういう場合には、ちょっと面倒ですがこうしましょう。
ステップ1:pathdef.m を、MATLABのバージョン毎に用意する
たとえば、マイドキュメントのMATLABフォルダの下に、R2010bなどのフォルダを用意します。そして、そこにpathdef.mを置いてやりましょう。
マイドキュメントの下の「MATLAB」フォルダの下に、さらに「R2010b」フォルダを作成
ステップ2:MATLABのスタートフォルダを、pathdef.mのあるフォルダに設定してやる
MATLABのショートカットを右クリックして、プロパティをクリックします。
そして、作業フォルダに、先ほどpathdef.mをおいたフォルダを指定してやります。
これでOKです。
この状態でMATLABを起動すると、「現在のフォルダー」が先ほど指定したフォルダになります。
そして、そこに置いてある pathdef.m が自動的に適用されています。
もう、「管理者として実行」しなくても良いため、セキュリティ的に少しだけマシな状態になります。
オマケ
この問題は、Windows7の、「いちどEXEを起動したら、あとからそいつに管理者権限を与えることはできない」という制限がネックになっています。
私がMATLABを作るのであれば、「pathdef.mを設定するだけ」のEXEを作って、MATLABからそいつをキックしてやります。キックする際に管理者権限を与える事はできるため、これで問題なくいけるはずです。(もちろん、いつもの「実行していいの?」ダイアログはでますが。)
ただ、そうするといつまでたってもProgram Filesの中身をいじる方式から抜けられません。それはそれで美しくないため、MATLABの開発チームは現状の仕様を選択したのだと思います。それにしても、MATLABバージョン毎にフォルダは分けて欲しかったなぁ。。。