ODP.NETのGAC登録

/ .NET, Database

ODP.NETを利用している業務系アプリのWindows 8.1、Windows 10への対応作業中。(主に動作確認レベルですが)
アプリの導入手順としてOracle Clientをインストールしておけば動くはずなのですが、なぜか動きません。
原因はODP.NETがGAC(グローバルアセンブリキャッシュ)に登録されていないため。
ODP.NET(Oracle.DataAccess.dll)を静的参照している場合、それと分かるエラーメッセージなどが出ずにいきなり落ちてしまったりするので結構ハマりがち。
ちなみに少し面倒だけれどもリフレクションを使って動的参照の形で作るといきなり落ちるようなことは防げます。

.Net Frameworkのバージョンが2.0時代の古いアプリなので、Win8.1/10の場合、先にWindowsの機能に「.NET Framework 3.5(2.0)」を追加しておかないと、Oracle Clientのインストーラが.NET 2.0用のODP.NET DLLをGACに登録してくれません。
このような場合に後からGAC登録するには以下のコマンドを実行すれば良いとのこと。(パスは適宜編集してください)

> cd C:\app\Administrator\product\11.2.0\dbhome_1\ODP.NET\bin\2.x
> oraprovcfg /action:gac /providerpath:C:\app\Administrator\product\11.2.0\dbhome_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll

Skylake問題などもあって、企業向けシステムのWindows 10対応が少し早まっているようです。
まぁ、そもそもWindows 7で動いていれば普通に動きそうなものなのですが、High DPIなどの対応まで考慮するとそのままでは厳しい部分もあったりなかったり。


■追記 2018-06-20
かれこれ2年以上経過しているエントリですが、意外と参照頻度が高く、関連するネタがあったので追記しておきます。
Windows 10 に .NET 2.0 用の ODP.NET をインストールする場合、本エントリの通り、事前に「.NET 3.5 の有効化」を施しておかないと自動的に GAC 登録してくれない、という話がありますが、つい最近「.NET 3.5 の有効化」を施しているにもかかわらず GAC 登録してくれないパターンに遭遇。
Oracle Database 12c Release 2 の 32bit 版クライアント win32_12201_client.zip にて事象確認。
ちなみに前バージョンの Oracle Database 12c Release 1 の winnt_12102_client32.zip では正常にGAC登録されるので、12.2 インストーラのバグ(処理漏れ)っぽい印象。
対策としては本エントリ記載の手動による GAC 登録を行えば OK です。
もはや ODP.NET を導入する際は手動 GAC 登録を必須とする運用にするしかないかもしれません…


■追記 2018-11-12
今更ながらの補足情報。
GAC 登録の対象として本体モジュール (Oracle.DataAccess.dll) しか書いていなかったのですが、ポリシー設定のファイルも一緒に GAC 登録しておかないとアプリごとにバージョンリダイレクトが必要になってしまいます。

> oraprovcfg /action:gac /providerpath:C:\app\Administrator\product\12.2.0\dbhome_1\ODP.NET\PublisherPolicy\2.x\Policy.2.102.Oracle.DataAccess.dll
> oraprovcfg /action:gac /providerpath:C:\app\Administrator\product\12.2.0\dbhome_1\ODP.NET\PublisherPolicy\2.x\Policy.2.111.Oracle.DataAccess.dll
> oraprovcfg /action:gac /providerpath:C:\app\Administrator\product\12.2.0\dbhome_1\ODP.NET\PublisherPolicy\2.x\Policy.2.112.Oracle.DataAccess.dll
> oraprovcfg /action:gac /providerpath:C:\app\Administrator\product\12.2.0\dbhome_1\ODP.NET\PublisherPolicy\2.x\Policy.2.121.Oracle.DataAccess.dll
> oraprovcfg /action:gac /providerpath:C:\app\Administrator\product\12.2.0\dbhome_1\ODP.NET\PublisherPolicy\2.x\Policy.2.122.Oracle.DataAccess.dll

実際にはアプリが参照しているバージョンのポリシーが登録されていれば事足りますが、とりあえず全部突っ込んでおけば良いでしょう。
.NET 2.0/3.5 ベースのアプリから Oracle クライアント 12.2 を利用する場合は前述の通り手動による GAC 登録が必要ですので、特にご注意あれ。


Live Calendar for UWP

/ UWP, Windows 10

image
これまで、国内では「タイルカレンダー」、海外向けには「Live Calendar」としてほぼ同じ内容のカレンダーアプリを提供していましたが、あらためて「Live Calendar (日本語版はライブカレンダー)」という名前に統一、Windows 10用UWPアプリとしてリメイクしました。

メインの機能は従来通り「スタート画面にカレンダーのライブタイルを作成する」というものですが、これまで不完全だったスケジュールの管理もWindows純正のメール/カレンダーアプリとの連携により実現できるようになり、一般的なカレンダーアプリとしても普通に利用できるようになりました。
配色やフォントなどカスタマイズの幅も広がったので、既存ユーザの方々にもぜひ使ってみていただきたい次第。
もちろん、UWPなのでPCやタブレットでも動作します。(メインターゲットはあくまでモバイルですが)

基本的な使い方は従来版とあまり大きく変わらないように配慮しましたが、新しく取り入れた要素などもあるため、ひとまず新バージョンに関する注意事項というかFAQ的な事柄を記載しておきたいと思います。

– 予定の管理について

前述の通り、新バージョンでは予定(スケジュール)の管理ができるようになりましたが、モバイルでは純正のメール/カレンダーアプリがバックグラウンドで動作しているとうまく呼び出されない事象が発生します。
予定の詳細表示や追加を実行したときにブラックアウトしてしまう場合は、戻るボタン長押しで表示されるタスク一覧からメール/カレンダーアプリを終了させてください。
また、PCの場合、もう少し深刻でメール/カレンダーアプリで編集した結果が即時反映されません。
いったん別の月に移動して戻るか、アプリのホームボタンをクリックするなどしてカレンダー表示を更新すると変更が反映されます。
解決方法が見つかれば対応したいのですが、現状、こちらは仕様というか制限事項として取り扱わせてください。

– 祝日の取り扱いについて

タイルカレンダーではアプリ内で自前で祝日表示をフォローする形となっていましたが、新バージョンでは純正カレンダーアプリで設定されている任意のユーザカレンダーを祝日として設定することができるようになりました。
この方法であれば海外ユーザの方々も自国の祝日が表示できるようになり利便性が増します。
このような事情のため、祝日を祝日として表示するためには、まず純正のカレンダーアプリを用いて休日カレンダーを追加しておく必要がありますのでご注意ください。

– 複数月のタイル作成について

新バージョンでは当月以外の任意の月についてもタイルが作成できるようになりました。
当月以外の月は静的なタイルとなり、定期的な自動更新は行われません。
不要になった場合は手動でピン留めを外してください。
また、当月以外の月はワイドタイルにはなりません。
なお、アプリから各種設定を変更してタイル作成(更新)を実行した場合、その時点で存在する全てのタイルに変更が適用されますので、個別にピン留めしなおす必要はありません。

– 「配色」設定について

旧バージョンはテーマカラー(黒または白)および透過色のみをサポートし、背景色と基本色が切り替わるだけでしたが、新バージョンでは土曜、日曜、祝日の文字色を含め、背景色、基本文字色のそれぞれをフルカスタマイズできるようになりました。
配色種別は「濃色」「淡色」「透明色」の3種類となり、それぞれをベースにカスタマイズが可能ですが、透明色の場合はWindowsがアクセントカラーを背景色として透過させる仕様となっているため、背景色の変更はできません。
また、この場合のアプリ内のカレンダーはアクセントカラーの透明度を少し下げて表示されます。

– 「カレンダー言語」設定について

既定ではデバイスに設定されているプライマリ言語を用いてカレンダー表示されます。
Windowsに複数の言語が設定されている場合は設定画面にて言語の切替が可能となります。
なお、アプリそのものの対応言語は現状、日本語と英語のみのため、カレンダー以外のキャプションは日英いずれかの言語で表示されます。

– 「自動更新間隔」設定について

本項目はモバイルで実行した場合のみ表示されます。
タイルの更新は従来同様バックグラウンドタスクによって行われますが、その実行間隔を設定できます。
バッテリ消耗が気になる場合は更新間隔を長くしてみてください。

– 「低メモリデバイスモード」設定について

本項目はモバイルで実行した場合のみ表示されます。
こちらは半ば開発者モード的な代物で通常はオフのまま変更する必要はありませんが、搭載メモリの少ないモバイルデバイスではバックグラウンドタスクが正常に動作しないケースが考えられます。
今のところ正式なW10Mデバイスでは存在しないと思いますが、512MBメモリのデバイスでは厳しいようで、実際に動作確認に用いたLumia 620(W10M Insider Preview)ではうまく動作しませんでした。
具体的にはワイドタイルの画像を作成する段階でメモリ不足に陥るようでしたので、このオプションを有効にすると、ワイドタイルの作成を省いてタスク実行されるようになります。
低メモリデバイスでタイル更新がうまく動作しない場合に本設定をオンにして試してみてください。
設定画面の一番下にある「バックグラウンドタスクの状況」が「finished on ~」であれば正常終了、それ以外の文言が表示されている場合は途中で失敗している可能性があります。
1GB以上のメモリを搭載しているデバイスで自動更新が失敗する場合はフィードバックをお願いいたします。

色々書きましたが、基本的にはそんなにややこしいアプリではありませんので、気軽に入れてみてください。
今回は有料アプリとしてリリースしていますが、従来は無料アプリだったこともありますので、ひとまず4月いっぱいはセール扱いで無料提供の予定です。