- PR -

◆【VB.Net Windows】ClickOnceで配布した「データファイル」の更新について

投稿者投稿内容
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-11-27 11:29
WindowsXP、VB2005EE Access2003 でWindowsアプリケーションを開発中です。
【状況説明】
現在、以下のサイトを参考にさせてもらいながらがら開発済みのアプリケーションをClickOnceで配置の
テストを行っています。
http://www.atmarkit.co.jp/fdotnet/clickonce/clickonce03/clickonce03_02.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/504clickondatapath/clickondatapath.html
[アプリケーションファイル]の設定はData1.mdb(AccessDB)だけが「データファイル」で、それ以外の
ファイルは全て「追加」に自動設定されています。配布先はWindous2000とWindowsXP及び
WindowsVistaの3台でテストしています。

テストの主な目的は、データファイル(Data1.mdb)にどのよな変更を加えて更新すると、ClickOnce
データ・ディレクトリにありますデータファイルも更新されるのかを調べています。
サイトの説明によると、ClickOnceデータ・ディレクトリのファイルであっても、2パターンほどは
データ・ファイルも書き換えられるとあります。

1.「ClickOnceにより配布するデータ・ファイル自体を更新した場合」
2.「更新前のアプリケーションがその実行中にClickOnceデータ・ディレクトリ内に何らかのファイルを作成した場合、それと同名のファイルがアプリケーションを更新する際に配布された場合」

【テスト内容】
以下そのテスト結果を連記します。
※上記した設定内容のApplication0_0_0_0でClickOnce配置し、で3台のPCは正常に動作しています。
※データファイルも更新をチェックするために3台のPCとも初期設定値を変更しました。

1.VB2005EEでApplicationフォームのソースを一部修正しただけで更新したが配置先のデータファイルはそのまま引き続き利用できた。

2.VB2005EEでData1.mdb(データファイル)のデータを一部変更して更新したら配置先のデータファイルも更新されて、初期設定値を変更した(更新前の)データとして引き続き利用出来なくなった。

3.VB2005EEでData1.mdbのテーブルを開きセルの幅を一部変更しただけで更新したら配置先のデータファイルも更新されて、前のバージョンのデータは消された。

4.VB2005EEでData1.mdbのテーブルをデザインで開きそのまま閉じて更新したら配置先のデータファイルも更新されて、前のバージョンのデータは消された。

5.データファイルの無変更を確保するために、あらかじめ前バージョンのData1.mdbを別の場所にコピーしておき、VB2005EEでApplicationフォームの一部修正後、保存しておいたData1.mdbを復元させて更新したが配置先のデータファイルも更新されて、前のバージョンのデータは消された。

【質問内容】
以上のテストからでは、一旦ClickOnceで配置したアプリケーションは、VB2005EEのProjectにある
データファイルに少しでも変化を与えると、次の更新時に配布先のデータ・ディレクトリにある
データファイルも更新されてしまうこととなります。
これだけ敏感にデータファイルの変更を感知されたら、配布した各ユーザーのデータファイルをうっかり
書き換えてしまうこととなって大変心配しています。(結果は3台とも同じです。)
私のテスト方法に問題があるのでしょうか。よろしくご指導下さい。

改行の修正

[ メッセージ編集済み 編集者: One.net 編集日時 2008-11-27 11:39 ]
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2008-11-27 13:28
質問が質問の形を成していないような気がしますが・・・。

質問内容は「テスト方法が正しいかどうか?」でいいのですか?

○○になるような形で配布したいが、現状思惑どうりに配布できていない。
○○を実現できる配布方法を教えてください。

を聞きたいのではないのでしょうか?
もう一度質問内容を見直していただいたほうが良いとおもわれます。

「テスト方法が正しいかどうか?」について言えば、
テストも正しく、結果も誤っていないように見えます。

テストケース1はデータディレクトリへの追加、変更は無いわけですから、
成功するケースですよね?

テストケース2、3、4では、変更内容は着眼点ではなく、
mdbファイルが変更されたかどうかでみれば、変更されているのだから、
更新されてしかるべくきですよね?(タイムスタンプ更新されますよね?)

テストケース5では、「更新前のアプリケーションがその実行中にClickOnceデータ・ディレクトリ内に何らかのファイルを作成した場合、それと同名のファイルがアプリケーションを更新する際に配布された場合」 に該当して、更新されるのでしょうね。

したがって、「ClickOnceデータ・ディレクトリのファイルであっても、2パターンほどは データ・ファイルも書き換えられるとあります。」が検証できているようなので、テスト方法事態は間違ってないのではないでしょうか?

それよりも、「どうやったらテストケースのような作業を行っても、配布先のデータファイルが上書きされない配布を実現できるのでしょうか?」が聞きたいのではないかとおもうのですが・・・

間違ってたらごめんなさい。
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-11-27 16:57
セラフさんありがとうございます。それに的確な回答でよく理解できました。
ハッシュ値が変更になるとありましたがタイムスタンプなども含まれるのですね。
私はこんなはずがない、何かテスト方法が悪いのだと考え、あのような質問になりました。
出来ましたらデータファイルの更新を避ける方法もご指導いただければ幸いです。
手が離せない仕事でお礼だけを申し上げて失礼します。

【追加】
セラフさん、回答いただきながら野暮用のために、私の返事を詳細に説明できなくて大変失礼いたしました。

私は明示的にデータファイルを変更していないのに更新されてしまうようなClickOnceなら、とても使えない。
と考え、「こんなはずはない、何かテストの方法に間違いがあるのだ」と思い、あのような質問をしました。
ところがセラフさんの回答で以下の通り、もともとの規定であることが明快に理解できました。

1.データディレクトリへの追加、変更は無いわけですから、データファイルの更新はない。
2〜4.タイムスタンプが更新されているのだから、 更新されてしかるべくきだ。
5.「更新前のアプリケーションがその実行中にClickOnceデータ・ディレクトリ内に何らかの
ファイルを作成した場合・・・・・・」に該当するため当然更新される。

大変明快な回答をいただき、納得できました。しかし一旦ClickOnceで配置した場合、元のプロジェクト
の管理、特にデータファイルが変更しないようにすることの難しさを痛感させられました。

データファイルを見ることさえ更新に結びつくようであれば、いったいどのように管理すればよいのか。大変神経
を使う必要があるように思いますが、やもうえないのでしょうか。もし誤ってデータファイルの変更をしてしまえば、
どれほど多くのクライアントに迷惑を掛けることになるのかと想像するだけで恐ろしく感じてしまいます。

セラフさんがご指摘のように「どうすれば配布先のデータファイルが上書きされない配布を実現できるの
でしょうか?」をご指導いただければ大変幸いです。よろしくお願いいたします。

【追加2】
ご回答いいただいた中の(1)「更新前のアプリケーションがその実行中にClickOnceデータ・ディレクトリ内
に何らかのファイルを作成した場合、」(2)「それと同名のファイルがアプリケーションを更新する際に
配布された場合」(.NET TIPSの説明と同じ)の(1)の部分は配置されたクライアント側話と想像しますが、
どうして配置元(開発者側)が同名のファイルを更新する偶然などあるのでしょうか。
このことと私が行いましたテスト5が同じ状況であるとわ思えないのですが、もう少し詳しく指導いただけ
れば幸いです。

修正:【追加】以降をあとで追加記述しました。
[ メッセージ編集済み 編集者: One.net 編集日時 2008-11-27 22:38 ]

修正:【追加2】以降を追加記述しました。

[ メッセージ編集済み 編集者: One.net 編集日時 2008-11-28 09:33 ]
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2008-11-28 10:32
【追加2】への回答です。

これは想像ですが、One.netさんが.mdbを削除した時点で、
配布元のデータファイルは存在しないが、配布先には存在する状態になり、
「更新前のアプリケーションがその実行中にClickOnceデータ・ディレクトリ内に何らかのファイルを作成した場合」になってしまい、
その後.mdbを復元したときに、「それと同名のファイルがアプリケーションを更新する際に配布された場合」に該当してしまったのかな?っと。

なので、「更新されるのでしょうね。」と発言しました。

テスト方法がどうかというより、結果がそうなのだから過程を想像するしかありませんでした。やりたいことが実現できない事実は変えようがないわけですから・・・。

今日は環境が無いので試せないのですが、配布するファイルの設定のなかで、初回のみ.mdbのファイルを配布する設定で発行し、以降は.mdbを配布しない設定で発行できなかったでしょうか?

確定的な情報が何1つ提示できず申し訳ありません。
Toshi
ベテラン
会議室デビュー日: 2007/09/18
投稿数: 68
お住まい・勤務地: 関東のどっか
投稿日時: 2008-11-28 11:31
こんにちわ、
あんまり細かく確認してないんですが、ClickOnceの動作自体をカスタマイズしてみてはどうでしょう?
http://www.atmarkit.co.jp/fdotnet/clickonce/clickonce04/clickonce04_01.html

任意のダウンロードグループのみアップデート対象にすることが可能なはずです。

※もっと簡単な方法があったらすいません。
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-11-28 14:32
セラフさんありがとうございました。
引用:

セラフさんの書き込み (2008-11-28 10:32) より:
【追加2】への回答です。
これは想像ですが、One.netさんが.mdbを削除した時点で、配布元のデータファイルは存在しないが、配布先には存在する状態になり、「更新前のアプリケーションがその実行中にClickOnceデータ・ディレクトリ内に何らかのファイルを作成した場合」になってしまい、その後.mdbを復元したときに、「それと同名のファイルがアプリケーションを更新する際に配布された場合」に該当してしまったのかな?っと。


私はデータファイル(.mdb)を削除した事はありません。また「更新前のアプリケーションがその実行中にClickOnceデータ・ディレクトリ内に何らかのファイルを作成した場合」とは配布先の話(ClickOnceデータ・ディレクトリ内とありますので)だと思いました。結局元々の.NET TIPSの説明もよく理解できませんでした。ただセラフさんがおっしゃる通り
引用:

セラフさんの書き込み (2008-11-28 10:32) より:
テスト方法がどうかというより、結果がそうなのだから過程を想像するしかありませんでした。やりたいことが実現できない事実は変えようがないわけですから・・・。


私もその通りだと思います。ClickOnceで更新(アップデート)した事とその結果を仕様としてとどめ置くことが重要と考え、.mdb Faile次のような内容変更をした場合(下表はタイムスタンプの変化)の更新結果をもう一度テストしてみて、報告します。

.mdb Faile
の変更内容_アクセス日_更新日_作成日__詳細_______________
移動__________変更______同じ____同じ__前バージョンの.mdbファイル移動し更新
コピー_________変更______同じ____変更__前バージョンの.mdbファイルコピーし更新
起動のみ_______変更______同じ____同じ__.mdbファイルを起動し、そのまま閉じた
テーブルを開____変更______同じ____同じ__.mdb起動後、テーブルを開きそのまま閉じた
デザインで開____変更______同じ____同じ__.mdb起動後、デザインで開きそのまま閉じた
画面サイズ変更__変更______変更____同じ__.mdb起動後、テーブルを開き画面サイズを変えてから閉じた。

ところで最初にダウンロードしてから、その後の更新(アップデート)にClickOnce データ・ディレクトリにありますデータファイルをも更新する必要があるのでしょうか。私も基本から考えて見ます。

またセラフさんからご指摘いただきました「データファイルが上書きされない配布方法」が最も知りたいところですが、この質問はまず、ClickOnceにおける基本的な動作、特にデータベースの更新についてご教示いただきたくスレッドを建てた次第です。

表の配列修正

[ メッセージ編集済み 編集者: One.net 編集日時 2008-11-28 14:38 ]
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-11-28 15:33
Toshiさん、アドバイスありがとうございます。
「任意のダウンロードグループのみアップデート対象とするようにClickOnceの動作自体をカスタマイズ」
とのアドバイス、ありがとうございました。この方法は最初から必要とする内容のみをダウンロードして、
必要になった時点でダウンロードするグループに分けル方法で、最初から全が必要な場合には使えない
と考えていました。少し勉強してみます。

ところで、データファイルを使ったアプリケーションを実際にClickOnceで運用されている先輩はどのように
運用されているのでしょうか。次のような心配が常に付きまといClickOnceの実使用上に問題を感じます。

1.配布元にあるデータファイル(.mdb)をうっかり開いてしまうことはないのでしょうか。

2.初のダウンロード後にアップロードする場合はデータファイルを更新させない方法はないのでしょうか。

3.誤ってデータファイルに変更を加えてしまった場合、その後のアップロードをどう対処すればよいのでしょうか。

4.ClickOnceで配置しているフリーソフト等、ダウンロードして使っているとアップロード時にデータファイルを
初期値に更新させられル事はないのでしょうか。

以上のことをどのように対処されているのかを教示いただければ幸いです。


_________________
修正:同対処すれば・・ → どう対処すれば・・

[ メッセージ編集済み 編集者: One.net 編集日時 2008-11-29 10:23 ]
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-12-01 22:49
スレッド主のOne.netです。
ClickOnceで配置して、配置元のデータファイル(.mdb)にどの程度の変化を与えてからアップデートした
場合、配布先のデータ・ディレクトリにあるデータファイルも更新されてしまうのか、についてのテスト結果を
以下に報告します。

【テスト報告】
テストの内容は次の通りです。
1.データファイル(.mdb)に加えた変化の内容(5パターン)
2.アップデート後の配布先データファイルの更新結果(更新されない場合は「同じ」と記述)
※テスト結果は各パターに対して同じ結果が出ないで、このテストを5パターン3回繰返し、21回の結果を
そのまま報告します。
※前回(2008.11.27)のテストはPCの都合でWindous2000で行ったが、今回はXPで行った。

.mdbの変更内容_____テスト結果1_テスト結果2_テスト結果3__詳細______________
前回分を移動_________同じ________同じ_______同じ___前バージョンの.mdbファイル移動し更新
前回をコピー__________同じ________同じ_______同じ___前バージョンの.mdbファイルコピーし更新
.mdb起動のみ________同じ________同じ_______同じ___.mdbファイルを起動し、そのまま閉じた
tableを開のみ________同じ________更新______更新___.mdb起動後、テーブルを開きそのまま閉じた
design開のみ________更新________同じ______更新___.mdb起動後、デザインで開きそのまま閉じた
画面size変更_________同じ________更新______更新___テーブルを開き画面サイズを変えて閉じた
table内容変更________更新_______更新______更新___テーブルを開き数値を変更してから閉じた

【テスト結果の考察】
1.テスト結果はタイムスタンプとリンクしていないと思われる。(下記サイトにハッシュ値とあるが手順不明)
→→ http://www.atmarkit.co.jp/fdotnet/clickonce/clickonce06/clickonce06_02.html
2.前回分も含めての結果で、table内容を変更すれば配布先のデータファイルも更新されるといえる。
3.table内容変更以外の上記パターンではランダムな反応で、一定の結果が得られない。

なを、以下のテストについては、次回報告します。
1.セラフさんから提示された.mdbを除いてビルド → アップデートする。
2.Toshiさんから提示された.mdbを除いたダウンロードグループをつくり、このグループでアップデートする。

以上

[ メッセージ編集済み 編集者: One.net 編集日時 2008-12-01 23:06 ]

スキルアップ/キャリアアップ(JOB@IT)