Oracleクライアントのアンインストール方法です。
複数VersionのOracleクライアントをインストールしている開発用PC(Windows8)で、
Oracleクライアントをアンインストールして、再度Oracleクライアントをインストールしたところ
.Netで作成したWindowsフォームアプリで32bitでコンパイルしたものが動作しなくなってしまいました。
同じく.Netで作成した別のWindowsフォームアプリで64bitでコンパイルしたものは動作しました。
使用しているOracle.DataAccess.dllが参照できなくなってしまったようです。
ODP.NETのdll(OracleDataAccess.dll)は、
GACにインストールされている「発行者ポリシー」の仕様により、
アプリケーション開発者が意図しないバージョンのODP.NETが、アプリケーションの実行時に使用されてしまうという問題があります。
詳しくはコチラ「
熱燗ロックのブログ ODP.NETのバージョン問題」
Oracleクライアントのアンインストールで、GACに登録されているOracleの発行者ポリーシーが削除されなかった為に
32ビット用のODP.NETを使用したときに、削除されなかった発行者ポリシーが、アンインストールされたODP.NETを使用するようにリダイレクトさせているようです。
そこで複数バージョンのOracleクライアントをインストールした際のアンインストール手順をメモっておきます。
アンインストール手順
Oracleクライントのアンインストール
「すべてのプログラム」 ⇒ 「Oracle - 各オラクルクライアントのバージョン」 ⇒ 「Oracle Installation Produucts」 より
「Universion Installer」を起動します。
開いたダイアログの「製品のアンインストール」ボタンをクリック
削除する製品をチェックして「削除」ボタンをクリック
すると「deinstall.bat」を実行しろと警告メッセージが表示されます。
指示されたバッチファイルを実行します。
(…各Oracleクライアントのdeinstall.batを実行すれば、ここまでの手順は不要だと思います。
バッチを実行すると、結構長い間「Checking for reuiured …略…」と表示されたままですが、しばらくするとアンインストールが始まります。
バッチがおわったら、残った残骸を削除していきます。
ファイルの削除
- C:\Program Files\Oracle
- C:\Program Files (x86)\Oracle
- 各オラクルクライアントをインストールしたフォルダ
(インストールフォルダがわからない場合は、後述のレジストリエディタ「HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE」で確認できます。)
スタートメニュー
「すべてのプログラム」でスタートメニューを起動し「Oracle - 各オラクルクライアントのバージョン」を削除
環境変数
「コントロールパネル」 ⇒ 「システム」⇒ 「システムの詳細設定」で「システムのプロパティ画面」を起動し、
「環境変数」ボタンをクリックし、「Path」からOracleを含む変数を削除します。
レジストリ
※削除する前にバックアップを取ってくださいね。
削除するキーは
Oracle10gの情報ですが
Oracle Database インストレーション・ガイド Oracle Databaseソフトウェアの削除の中ほどに
「Microsoftレジストリ エディタからのOracleキーの削除」に記載されているものを削除しました。
「ファイル名を指定して実行」より「regedit」と入力し「レジストリエディタ」を起動します。
■HKEY_CLASSES_ROOT
Ora、Oracle、OrclまたはEnumOraで始まるキーを削除。
以下のものがあります。
- EnumOraHomes
- OracleConfig
- OracleDatabase
- OracleHome
- OracleInProcServer
- OracleProcess
- ORADC
- ORAMMCCFG10
- ORAMMCPMON10
- OraOLEDB
- OraPerfMon
- ORCLMMC
- ORCLSSO
■HKEY_CURRENT_USER
ORACLEキーを削除。
■HKEY_CURRENT_USER\Software
Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu\Programsの下にあるOracle-HOME_NAMEエントリなど、すべてのOracleキーを削除。
■HKEY_LOCAL_MACHINE\SOFTWARE
ORACLE Groupキーを削除。
※ここに記載されている内容ががOracle Universal Installerの場所です。
■HKEY_LOCAL_MACHINE\SOFTWARE\ODBC
ODBCの下にあるサブキーをすべて展開して、Microsoft ODBC for Oracleキーを除くOracle関連のODBCドライバ・キーをすべて削除。
■HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
この下のOracleまたはOraWebで始まるすべてのキーを削除。
■HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
この下のOracleで始まるすべてのキーを削除。
GACの削除
C:\Windows\Microsoft.NET\assembl\GAC_32
C:\Windows\Microsoft.NET\assembl\GAC_64
C:\Windows\Microsoft.NET\assembl\GAC_MSIL
C:\Windows\assembly
上記のフォルダからOracleとつくファイルを削除していきます。
以下のようなものがあります。
- Oracle.DatatAccess
- Oracle.DataAccess.resources
- Oracle.Web
- Oracle.Web.resources
- Policy.XXXXX.Oracle.DataAccess
- Policy.XXXXX.Oracle.Web
上記のファイルは削除しようとすると「アクセス権限がありません。」となります。
VisualStudio付属ツールのコマンドプロンプトを使用して削除します。(GACからアセンブリを登録解除する)
VisualStudio2013の場合
「スタートプログラム」 ⇒ 「Microsoft Visual Studio 2013」⇒ 「Visual Studio ツール」をクリックし「開発者コマンド プロンプト for VS2013」を右クリック「管理者として実行」
VisualStudio2010の場合
「スタートプログラム」 ⇒ 「Microsoft Visual Studio 2010」⇒ 「Visual Studio ツール」⇒「Visual Studio コマンド プロンプト (2010)」を右クリックし「管理者として実行」
GACからアセンブリを登録解除するコマンドを入力します。
gacutil /u "削除するアセンブリ名,Version=X.XXX.X.X, Culture=XXXXX, PublicKeyToken=XXXXXXXXXXX"
アセンブリの情報はファイルエクスプローラより削除したいアセンブリを右クリックし「プロパティ」で確認できます。
たとえばOracle.DataAccessを削除する場合
gacutil /u "Oracle.DataAccess,Version=2.121.1.0, Culture=Neutral, PublicKeyToken=89b483f429c47342"
以上で削除は終了です。
忘れずにPCを再起動します。
Oracleクライアントを再インストールして、.Netで作成したWindowsフォームアプリ(32bit、64bit)ともに正常に動作しました。