技術めいた何か

1人の大学生によるIT系の記事群

Windowsでexeやmsiの互換モードを一括指定できるスクリプト組んだ

ソースコードはこちら(GitHub)

ダウンロードはこちら

タイトルの通りです。デフォルトでは指定フォルダ以下のexeを"XPsp3"にmsiを"Windowsの以前のバージョン"に設定するようになっています。

MITライセンスで公開しているのでXPsp3以外にしたいしたい時は適宜変更を加えて利用してください。

 

変更箇所は50行目にある"~ WINXPSP3"の部分(ver0.0.1時点)です。
ver0.0.3では43行目になります。

指定する値に関してははWindows - 実行ファイルの互換モードを設定する - Qiitaが詳しいです。

 

以下苦労した点3つ

1.なぜかPowershellで動かない

最初はPowershellで書こうとした。けれど、ファイル列挙からの登録がうまくいかない。仕方ないのでWSHでやることにした。

 

2.WSHでの を含むレジストリエントリの登録

互換モード登録はレジストリで管理されている。

そして登録に必要な情報は

・実行ファイルのフルパス

・モードの指定

である。

厄介なことにWSHの RegWrite で書こうとしたら、パスのように を含む文字列の登録はその特性上不可能だった。ここで3時間くらい悩む。

 

3.JScriptの情報が少ない

なぜJScriptで書こうとしてしまったのだろうかと後悔するほど情報が少ない。

日本語を諦めて探したら、まずMS公式(英語)のページが

PRB: Unable to Use a "" in the Key Name with the RegWrite Method of Windows Script Host

やった! 解決策が書いてある!! と思ったらVBScriptだったorz

その後、諦め半分でネット上を放浪していたらstackoverflowにこんなスレッドが

How to add a string registry entry that contains backslashes itself?

なんとそこにはJScriptでほとんど同じ問題を抱えていた人を見事救った答えがあったのだ!(歓喜)

その流れがあってstackoverflowのスレッドの内容を参考に関数を作ってどうにかなりました!!