ClickOnceでターゲットCPUを変更するとユーザー設定を引き継げない
はじめに
サーバーリプレースでデータベース変更(Oracle 11g → PostgreSQL 9.6)になるため、アプリケーションの改修作業をしており、その中でClickOnceを使用したものがありました。
以前、別アプリケーションの改修作業をした際には、下記の方法でユーザー設定(user.config)を引き継げることが出来ました。
ClickOnceでバージョンアップしても消えないデータの残し方
if (!Properties.Settings.Default.IsUpgraded)
{
Properties.Settings.Default.Upgrade();
Properties.Settings.Default.IsUpgraded = true;
Properties.Settings.Default.Save();
}
}
調査
今回はユーザー設定(user.config)を引き継げなかった上に「プログラムと機能」には以前のバージョンが残ったままとなる原因を簡単なプログラムを作成して調査しました。
※ClickOnceでは、アセンブリバージョンで設定ファイル(user.cofig)が作成されるので、アセンブリバージョンを変更してしまうと前バージョンの設定を引き継げなくなる。ClickOnceを使う場合は発行バージョンでバージョンを管理する。よって、アセンブリバージョンは1.0.0.0のままにしておく。
プログラム仕様
user.configには、"テスト"が初期値に入っておりテキストボックスに初期表示し、ボタンをクリックすることで値を書き換えることが出来る。
調査開始
発行バージョン 3.0.1.0、アセンブリバージョン 1.0.0.0
"テスト"から"ABC"に変更してユーザー設定を書き換えた。
発行バージョン 3.0.2.0、アセンブリバージョン 1.0.0.0
「プログラムと機能」でも以前のバージョンは消えて最新バージョンのみとなっている。
ここで一旦、発行バージョン 3.0.2.0 はアンインストール時に以前のバージョン 3.0.1.0 に戻す。
発行バージョン 3.1.0.0、アセンブリバージョン 1.0.0.0
プラットフォームターゲットをAnyCPUからx86に変更。
「プログラムと機能」には以前のバージョンが残ったままとなる。
原因
ClickOnceの配布条件にはターゲットCPUも含まれているということになります。
このアプリケーションはmdbファイルの読み込み処理があり、64bit版Windowsには「Microsoft.Jet.OLEDB.4.0」が存在しないため、プラットフォームターゲットをAnyCPUからx86にしました。これ以外にもClickOnceでCrystalReportインストール時のlog4net Version=1.2.10.0エラーなどもあり、64bit対応に苦労した経緯があったのです。
- 64bit版Windowsでの「Microsoft.Jet.OLEDB.4.0」について
- Visual Studio 2010のVisualStudioインストーラーでCrystal Reportsのlog4net.dll関連エラーのためインストーラーが作成できない
- 64bitOSで32bit版Crystal Reportsインストール
対応
強引にユーザー設定(user.config)を引き継ぐ処理を入れようとしたら、Application Data の内容を読み取りしようとするとアクセス拒否されてしまうのです。
アクセス権限までどうこうするまでやりたくないので、ここは諦めてユーザーさんに設定値を再入力してもらうことにします。
もともとユーザー設定を引き継ぐ処理は入ってなくて、改修のついでに入れようとしたんだよね。次のバージョンからはターゲットCPUが同じになるのでユーザー設定は引き継がれる。
最後に
Windows 7のPCを購入するのも難しくなってきました。そうすると、Windows 10 64bit版のPCを購入することになります(今更32bit版にしないかなと・・・)
その割には、Officeは32bit版をインストールされたりするんだよな。
64bit版の「Microsoft.Jet.OLEDB.4.0」を提供しないから面倒くさいんだよね。
ClickOnceによるインストール自体がもう古いのかな。
Author And Source
この問題について(ClickOnceでターゲットCPUを変更するとユーザー設定を引き継げない), 我々は、より多くの情報をここで見つけました https://qiita.com/yaju/items/4c1882ba2605e5d3221c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .