history | TOP |
2007/01/20:作成
2007/01/22:後始末
2007/02/02:その後
はじめに | TOP |
実際に以下のように操作していますが、お話として読んでください。正しいという根拠はありません。
久しぶりに Platform SDK を更新しようと思い立ちました。発端はDirectXというものが気になりだしたというか... 今インストールしてあるのは「Microsoft Platform SDK October 2002」で当然2002年ごろにダウンロードしたものです。
どちらもIrvineを使ってダウンロードし終わりました。Platform SDK を ISO でダウンロードしたのは、普通の(?)分は18個ぐらいのcabファイルに分割されていて邪魔くさかったためです。
ダウンロード中に、今インストールしてある SDK をアンインストールしないとなぁ と思ってスタートメニューから「Uninstall Platform SDK October 2002」(実体は C:¥Program Files¥Microsoft SDK¥Default_Local.htm) をクリックしました。
が!
オブジェクトでサポートされていないプロパティまたはメソッドです。
ああそうか。Donut RAPT を使ってるんだった。ひょっとしたら、ちゃんと(?) Internet Explorer で実行しないといけないのかも。結構 OS 本体に食い込みそうな感じだし。
が!
オブジェクトでサポートされていないプロパティまたはメソッドです。
「ページが表示されました」の左にエラーマークが。
エラー:文字が正しくありません。
エラー:文字が正しくありません。
何がなんだかわかりません。前にインストールしたときは普通にできたのに。どうしたらいいのかわからないままGoogleに聞いてみました。
コレを書いている時点でオフラインなので詳細は忘れましたが、「アンインストールできねぇよ。IE のバージョンを変えたぐらいでアプリケーションのインストールのような根幹にかかわるところに影響が出るなんてありえねぇ」という感じの内容でした。確かに IE を 7 に上げました。またこの人は、2つ目のリンクにあるスクリプトを使って、何かを列挙して SDK と思われるパッケージ(.msi だったような)を列挙して、コマンドラインから強制的にアンインストールを試みていました。
深く確認せずにそのスクリプトをメモ帳に貼り付けて保存して実行してみると(恐ろしいことを...)エラーになってしまいました。
エラー:構文エラーです。
ほんの数十行程度のスクリプトなんで、コレをよく読んで自分の環境に合うように修正する方が早いのかもしれませんが、非常に良いヒントを得たことに気をよくして、自分でやってみようと。
つまり、どの SDK をインストールしたかを調べて、それに対応する msi ファイルの名前を探してアンインストールを実行するような。もちろんわかっています。この人が一撃必殺で解決した方法をあえて使わない理由なんてこれっぽっちもないことは。
ただ、正規の手順ではないからこそ自分で納得してやるべきだとも思っていると思います。ま、その辺です。
それっぽい情報 | TOP |
手始めに、状況を整理してみます(モノは言い様)。2002年ごろの SDK を使用していますが、作成されているフォルダの大半が 2005/12/05 に作成されていることから、その日にインストールしたと思われます。とすると、何かしらアンインストールするための情報をインストール時に書き込んであると考えると、そのファイルは 2005/12/05 かそれ以降の更新日になっているはずです。
「C:¥Program Files¥Microsoft SDK」にインストールしたので、まずはこのフォルダの中でそういう更新日を持つファイルを列挙してみます。
スクリプトの意味をメモっておきます。
そういうわけで、たったの5ファイルでした。
C:¥Program Files¥Microsoft SDK¥SetEnv.Bat
環境変数関係か。確かに環境変数に SDK のものがある。
C:¥Program Files¥Microsoft SDK¥Bin¥FmtFile.txt
0byte のファイルなので無視。
C:¥Program Files¥Microsoft SDK¥Bin¥FmtSum.txt
なんかのアプリの出力結果か。無視。
C:¥Program Files¥Microsoft SDK¥Samples¥Begin\sdkdiff\sdkdiff.GID
sdkdiff.hlp のインデックスファイルか何か。無視。
C:¥Program Files¥Microsoft SDK¥Setup¥SDKSite.Url
"http://www.microsoft.com/msdownload/platformsdk/sdkupdate" へのインターネットショートカットファイル。
なんかどれもアレか。環境変数ぐらい。
場当たり的にレジストリ調査 | TOP |
HKEY_CURRENT_USER¥Software¥Microsoft¥MicrosoftSDK を見てみる。
InstalledSDKs なるモロなものがあります。
HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥MicrosoftSDK を見てみる。
ここにも InstalledSDKs なるモロなものがあります。GUID はさっきの InstalledSDKs に完全に対応しています。しかも詳細な感じで。
HEKY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥Uninstall を見てみる。
こっちはまた違う GUID です。しかもむかつくことに Comments として「To Update/Uninstall this SDK or provide feedback, click the Support Information link. To remove SDK Update components from your system if you do not have a live Internet connection, go to the root directory of the SDK Update CD and select default.htm.」とあります。それができひんからくちゃくちゃせなあかんのに。
この Uninstall 配下には、SDK 関係のまったく同じ Comments を持つものがかなりたくさんあります。
基本に戻って SDK のインストールフォルダを見てみる | TOP |
C:¥Program Files¥Microsoft SDK¥Setup¥UnInstall¥SDKZap.bat を見てみる。
ちょっと違うか。「WindowsXP」や「Octobar 2002」が見つからないので。
Windows インストーラ(MSIEXEC.EXE)について | TOP |
最初にGoogleで見つけたサイトでは、多分 MSIEXEC に何かのオプションをつけてパッケージをあらわす GUID をつけてアンインストールしていました。ここにきて、まだオフラインですのではっきりとはわかりませんが。でもどう考えても、GUID の部分は、「InstalledSDKs」にエントリされていたあれらだと思います。
じゃあ MSIEXEC って何か、MSIEXEC につけるべきオプションとは、について見てみます。
コマンドプロンプトで「msiexec /?」と打ってみると
Windows (R) インストーラ. V 3.01.4000.1823 msiexec /Option <必須パラメータ> [省略可能なパラメータ] インストール オプション </package | /i> <Product.msi> 製品をインストールまたは構成します。 /a <Product.msi> 管理用ツール - ネットワーク上の製品をインストールします。 /j<u|m> <Product.msi> [/t <変換一覧>] [/g <言語 ID>] 製品をアドバタイズします - すべてのユーザーには m、現在のユーザーには u を指定します。 </uninstall | /x> <Product.msi | 製品コード> 製品をアンインストールします。 表示オプション /quiet Quiet モード - ユーザーの操作なし /passive 無人モード - 進行状況バーのみ /q[n|b|r|f] ユーザー インターフェイスのレベルを設定します。 n - なし b - 基本 r - 簡易 f - 完全 (既定) /help ヘルプ情報 再起動オプション /norestart インストール完了後に再起動しません。 /promptrestart 再起動が必要な場合は、ユーザーに再起動を要求します。 /forcerestart 常に、インストール後コンピュータを再起動します。 ログ オプション /l[i|w|e|a|r|u|c|m|o|p|v|x|+|!|*] <LogFile> i - 状態メッセージ w - 致命的ではない警告 e - すべてのエラー メッセージ a - 操作のスタートアップ r - 特定の操作の記録 u - ユーザーの要求 c - UI パラメータの初期値 m - メモリ不足または致命的な終了に関する情報 o - ディスク領域不足メッセージ p - ターミナルのプロパティ v - 詳細出力 x - 詳細デバッグ情報 + - 既存のログ ファイルに追加 ! - 各行をログにフラッシュ * - v オプションと x オプションを除くすべての情報をログに記録します。 /log <ログ ファイル> /l* <ログ ファイル> と指定したときと同じ情報がログに記録されます。 更新オプション /update <Update1.msp>[;Update2.msp] 更新を適用します。 /uninstall <修正プログラム コード GUID>[;Update2.msp] /package <Product.msi | 製品コード> 製品の更新を削除します。 修復オプション /f[p|e|c|m|s|o|d|a|u|v] <Product.msi | 製品コード> 製品を修復します。 p - ファイルが見つからない場合のみ o - ファイルが見つからない、または古いバージョンがインストールされている場合 (既定) e - ファイルが見つからない、同じバージョンまたは古いバージョンがインストールされている場合 d - ファイルが見つからない、または違うバージョンがインストールされている場合 c - ファイルが見つからない、またはチェックサムと計算された値が一致しない場合 a - すべてのファイルをインストールする u - すべてのユーザー固有の必須レジストリ エントリ (既定) m - すべてコンピュータ固有の必須レジストリ エントリ (既定) s - すべての既存のショートカット (既定) v - ソースから実行して、パッケージをローカルに再キャッシュする パブリック プロパティの設定 [PROPERTY=プロパティ値] コマンド ラインの構文の詳細については、Windows (R) インストーラ SDK を参照してください。 Copyright (C) Microsoft Corporation. All rights reserved. Portions of this software are based in part on the work of the Independent JPEG Group.
アンインストールなら「msiexec /x 製品コード」ってわけですね。了解。つまるところ、
msiexec /x 18C0AA8D-6F0D-48E9-93D4-14BED1109B6B msiexec /x 2010A8B6-A786-4A5F-BBF3-ACF5B5350CAB msiexec /x 2383787F-A228-4733-9ADE-27C0E206050D msiexec /x 2947DB4F-0B04-4DAE-89D1-AD07138F6B04 msiexec /x 44EA8771-41C9-4767-8E5F-C3490C9E8C26 msiexec /x 5199CDF5-59CF-492E-B732-13DAA65ED40C msiexec /x 588431D3-A6D3-4ECD-A79F-1C330E7A5031 msiexec /x 63DADB24-DC99-45EB-A748-EC93AB8A7497 msiexec /x 91340803-48C0-458C-A9A9-BB40CAE5B6F4 msiexec /x A4F8F14A-7562-4129-B6D9-9C269E612E04 msiexec /x AE95AF1B-22CE-4348-B67E-DAD6B2EC65F0 msiexec /x B9B8BDA9-DC24-49E5-8AD6-37C06EA0849E msiexec /x C46585AC-E005-48E9-BF80-8FFC4CC5DE93 msiexec /x F9F90BB1-1CA2-487E-8E1F-3C521DFA5CAF msiexec /x FE9275FF-19EF-4CA4-8BE0-B24D6B6168FE
こういうことだと思うんですが、怖くて怖くてできません。もしも失敗したとき、新しい SDK をインストールできなかったりしたら、オフラインで API を調べられなくなってしまいます。もちろん古い SDK は、インストーラそのものがアンインストーラが動かないのと同じ理由で動かないだろうから、どうしようもないだろうし。
とりあえず、今まで多分使ったことのない「Internet Information Server SDK (Version 5.1)」という title のついている GUID (F9F90BB1-1CA2-487E-8E1F-3C521DFA5CAF) で試してみることにします。
いってみよう | TOP |
やってみました。Internet Information Server (IIS) SDK を消すために。
msiexec /x F9F90BB1-1CA2-487E-8E1F-3C521DFA5CAF
思わず「いいえ」を押した後の2回目です。「はい」で。
あ。エラー。コレはパッケージをあらわしている GUID じゃなかったのか...
再検討 | TOP |
もう一度レジストリエディタで「InstalledSDKs」を見てみると、この15個の GUID は全て「installer_guid」として「DD668E82-FF32-4c2a-80BD-EB7E44E33A5C」という同じ GUID を配下に抱えていることに気づきました。レジストリエディタで「マイコンピュータ」を選んで、この「DD668E82-FF32-4c2a-80BD-EB7E44E33A5C」という GUID で全検索をかけてみると、さっきの15個の配下に加えて、もうひとつ見つかりました。
コレっぽい。「ProductGuid」なんてのも持っているし。イきますか。
いってみよう(2回目) | TOP |
やってみました。Internet Information Server (IIS) SDK を消すために。
msiexec /x BAD79EAE-DFFA-4B76-B30F-3E100312D0DB
またエラー。コレもパッケージをあらわしている GUID じゃなかったのか... じゃあどれよ。
再三検討 | TOP |
HEKY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥Uninstall を見てみる。 もうだんだんとどうでもよくなってきました。よりアグレッシブにやってみます。
Uninstall 配下にある SDK 関係の GUID と その DisplayName を一覧にしてみます。
その前に、そういう一覧を楽に作るためのプログラムを作ります。以前に作成した WindowsXP に適用済みの HotFix の一覧を取得する XpHotFixCheker を97%ぐらいパクってサクッと作りました。バージョン情報を書き換えるのが一番手間がかかってます。
EnumUninstallEntry20070120.zip(72,244Bytes) ソースコードと実行ファイルです。
コンソールプログラムなので「EnumUninstallEntry.exe > EnumUninstallEntry.txt」のようにコマンドプロンプトで実行すれば、まったく一切役に立つ場面を想像できない一覧を出力します。
今回は、その中で Platform SDK 関係のものだけを取り出したいので「EnumUninstallEntry.exe | find "3718.1" > EnumUninstallEntry.txt」というコマンドを実行しました。ちなみに最初は「EnumUninstallEntry.exe | find "SDK"」としたんですが、「HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥MicrosoftSDK」と比べてみると「Common Setup Files」というデータが抜け落ちることに気づきました。なので全部に含まれている(ように見える)「3718.1」をフィルターに使っています。
コレを使って一覧を作ってみました。
GUID | DisplayName |
---|---|
Microsoft SDK Update | Microsoft SDK Update October 2002 (5.2.3718.1) |
{03A5ED82-0E69-4045-8261-E8C991266DB3} | Windows Management Instrumentation (WMI) SDK (3718.1) |
{0E092E94-6C4C-4914-9147-09880C3A1986} | Windows Media Player 6 SDK (3718.1) |
{1AF3ADEB-D07B-40BB-9205-29CCD5CD97E8} | Tablet PC SDK (3718.1) |
{1FF00152-EB25-4FB7-BEBC-3512E939E029} | Windows Media Device Manager SDK (3718.1) |
{56014C3E-E0B1-4800-ADC5-FB8E15E3C876} | Core SDK (Windows .NET Server RC2) (3718.1) |
{8A9293D3-0526-44BE-BE80-A17CA15A467A} | Internet Information Server (IIS) SDK (Version 5.1) (3718.1) |
{936C99EC-D660-45F0-B493-8FCE12D3915D} | Internet Development SDK (Version 6.0) (3718.1) |
{BE18D538-2682-499A-8A6B-BC758B299187} | DirectShow SDK for Windows XP SP1 (3718.1) |
{C05FC212-471E-451E-B4AB-6C6E842865E8} | Windows Media Player SDK (3718.1) |
{C74EFB67-1E45-449E-AAAB-3E13636B0111} | DirectX SDK (Version 8.1) (3718.1) |
{CDBFA9E7-4CB2-4F10-9A1F-8EA8AF53B0D7} | Windows Installer SDK (Version 2.0) (3718.1) |
{D2033C9C-DEDD-439B-8739-4078ED7A32DA} | Microsoft Data Access Components (MDAC) SDK (Ver 2.7) (3718.1) |
{D399F6EE-47CE-449F-9318-35277FCF767A} | Windows Media Services SDK (3718.1) |
{E102A450-F094-4808-9F34-5C398DC2AEE7} | Windows Media Format SDK (3718.1) |
{E38EBB91-9FA4-4250-B4CB-98067F2A8DDB} | Common Setup Files (3718.1) |
いってみよう(3回目) | TOP |
やってみました。Internet Information Server (IIS) SDK を消すために。
msiexec /x {8A9293D3-0526-44BE-BE80-A17CA15A467A}
きましたよ。コレでした。と思ったのもつかの間。レジストリエディタで確認すると「HKEY_CURRENT_USER」からは消えてましたが「HKEY_LOCAL_MACHINE」には残ったままです。ま、ええか。
今度は思い切って親玉のように見える「Microsoft SDK Update」をガツッとやってみることにします。
msiexec /x "Microsoft SDK Update"
エラー。違いました。
おとなしくひとつずつやることにします。といっても、bat ファイルにしてカツッと。ただ少しだけ立ち止まって削除する順番について考察してみます。
きっと「Core SDK」は最後の方がいいだろうと思います。それにもまして「Common Setup Files」こそ本当の最後がいいかと。
UninstallSDK.bat
Pause msiexec /x {8A9293D3-0526-44BE-BE80-A17CA15A467A} Pause msiexec /x {03A5ED82-0E69-4045-8261-E8C991266DB3} Pause msiexec /x {0E092E94-6C4C-4914-9147-09880C3A1986} Pause msiexec /x {1AF3ADEB-D07B-40BB-9205-29CCD5CD97E8} Pause msiexec /x {1FF00152-EB25-4FB7-BEBC-3512E939E029} Pause msiexec /x {936C99EC-D660-45F0-B493-8FCE12D3915D} Pause msiexec /x {BE18D538-2682-499A-8A6B-BC758B299187} Pause msiexec /x {C05FC212-471E-451E-B4AB-6C6E842865E8} Pause msiexec /x {C74EFB67-1E45-449E-AAAB-3E13636B0111} Pause msiexec /x {CDBFA9E7-4CB2-4F10-9A1F-8EA8AF53B0D7} Pause msiexec /x {D2033C9C-DEDD-439B-8739-4078ED7A32DA} Pause msiexec /x {D399F6EE-47CE-449F-9318-35277FCF767A} Pause msiexec /x {E102A450-F094-4808-9F34-5C398DC2AEE7} Pause msiexec /x {56014C3E-E0B1-4800-ADC5-FB8E15E3C876} Pause msiexec /x {E38EBB91-9FA4-4250-B4CB-98067F2A8DDB} Pause
見た感じは何かをアンインストールしているようです。
Internet Information Server (IIS) SDK (Version 5.1) (3718.1) は最初に削除しちゃってるんで当然こうなります。
残りも行きました。Windows Management Instrumentation (WMI) SDK (3718.1)
Windows Media Player 6 SDK (3718.1)
Tablet PC SDK (3718.1)
Windows Media Device Manager SDK (3718.1)
Internet Development SDK (Version 6.0) (3718.1)
DirectShow SDK for Windows XP SP1 (3718.1)
Windows Media Player SDK (3718.1)
DirectX SDK (Version 8.1) (3718.1)
Windows Installer SDK (Version 2.0) (3718.1)
Microsoft Data Access Components (MDAC) SDK (Ver 2.7) (3718.1)
Windows Media Services SDK (3718.1)
Windows Media Format SDK (3718.1)
Core SDK (Windows .NET Server RC2) (3718.1)
Common Setup Files (3718.1)
結局どうなったのか | TOP |
まず、C:¥Program Files¥Microsoft SDK¥ をのぞいてみると、ちゃんとファイルがなくなっています。ただし、サンプルを実行したことで作成されたファイルや、Thumbs.db が作成されたフォルダはインストーラは削除してよいかどうかを判断できないので残ってますが、それ以外はきれいさっぱりなくなってます。
滅殺...できませんでした。サブフォルダは削除できましたが、誰かが使っているようです。
環境変数は...消えてます。ユーザー環境変数もシステム環境変数も。グッド。
HKEY_CURRENT_USER は...消えてます。
HEKY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥Uninstall は...消えてます。当然、この GUID を頼りに消したので消えていてほしいものです。
HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥MicrosoftSDK は...丸残り。がっくり。でも、ファイル自体は なくなっちゃってるんで再起動してから考えることにします。
再起動後にやっておきたい作業 | TOP |
こんなところに書いて、再起動後に見るのかどうか怪しいもんです。
あーあ、1回やったら2度と使わないのにがっちり書いてしまいました。
後始末(2007/01/22) | TOP |
まず、「C:¥Program Files¥Microsoft SDK¥」を削除しました。削除できました。
次に、「HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥MicrosoftSDK」を削除しました。
それから、「SDK」でレジストリを検索すると...イヤになるほどヒットしました。ので、ほっときました。
以上。
なんというか、飽きました。最新のSDKをインストールするときに何か起きたら考えることにします。
その後(2007/02/02) | TOP |
すでにダウンロードしておいた SDK 二つをインストールしてみました。
デフォルトでインストールしようとするフォルダが、非常に長い名前だったので、前と同じ「C:¥Program Files¥Microsoft SDK¥」にしようとも思ったんですが、なんとなくトラブりそうだったのでやめました。
結局、レジストリに「C:¥Program Files¥Microsoft SDK¥」を含むデータを大量に残したまま、新しい SDK をインストールしてしまいました。で、問題なく使えているのでよしとします。
終わり。
EOF | TOP |