0

複数のC#プロジェクトとその他のファイルをデプロイするVisual Studio Installerセットアッププロジェクトをビルドしようとしています。これらの他のファイルには、更新が必要なフォームを含むAccessデータベースが含まれています。VS2015セットアッププロジェクト再インストール時にパッケージに含まれるAccessデータベースが更新されない

問題を説明するために、私はそれを簡素化:

1-、新しいAccessデータベースファイルを作成]ボタンとラベルとそれに簡単なフォームを追加して保存します。

2ファイルをセットアッププロジェクトに追加します。

、3-セットDetectNewerInstalledVersionRemovePreviousVersionプロジェクトをビルドし、4-

trueへ。

5セットアップ実行ファイルを実行します。その時点までに

は、すべてが

6 Accessデータベースファイルを再び開き、フォームにボタンやラベルを追加し、それを保存うまく働いています。

7-セットアッププロジェクトの番号Versionを変更し、同時にVS2015の提案通りにProductCodeを変更します。

8-セットアッププロジェクトを再構築します。

9-ソフトウェアを再インストールします。

予想:アクセスデータは、新しいボタン/ラベルで更新されている必要があります。

何が起こっているのですか:ファイルが更新されていません。

なぜですか?私はセットアッププロジェクトに含まれているアセンブリバージョンのプロジェクト数について話してきましたが、プロジェクトの出力を展開しているわけではありません。私は単に、アンインストールプロセス中に削除されるべきファイルを配備しています。

私がテキストを追加するテキストファイルを使用して前述の手順と全く同じ手順を実行した場合、正常に動作しますが、何らかの理由でAccessデータベースで動作しません。

どういうところが間違っていますか?

答えて

0

解決策が見つかりました。変更された日付が変更されたため、ファイルは更新されませんでした。 MSFT siteから

バージョン非対応のファイルがあるユーザーデータ-場合は更新日がユーザーのカスタマイズが削除されるので、ファイル をインストールしていない、コンピュータ上のファイルの日付を作成します よりも遅いです。 Modifiedと の作成日が同じ場合は、ファイルをインストールします。作成日が変更日より後で の場合、ファイルは変更されていないとみなされ、 ファイルがインストールされます。

:私は2つのAccessデータベース(データテーブルとフォームとフロントエンド、バックエンド)を持っていただけ、更新する1(フォームがあるフロントエンド)を必要とするので

は、ここでの回避策です1)既定のomusではなく、REINSTALLMODEプロパティをamusに変更します。すべてのファイルを強制的に再インストールします。そのために、PostBuildEventas explained hereを使用しました。

2)Launch Condition追加)Permanent

true

3バックエンドファイルのプロパティを設定します。バックエンドファイルがコンピュータに存在するかどうかを確認するためにSearch Target Machineを。それをBACKENDEXISTS

4のようなものに名前を付けて)、それはLaunch Conditionによって発見されていない場合にのみ、ファイルをインストールするFile Systemビュー内のバックエンドファイルにCondition値を追加します。この場合、not BACKENDEXISTSになります。これが最初のインストールである場合、ファイルが見つからないためインストールされます。これがアップデートの場合、Permanentプロパティのためにファイルが見つかり、置き換えられません。

+0

1)変更されたデータの説明が私の答えです。なぜあなたがそれを見なかったのか、私はそれを明確にしていませんでした。 2)REINSTALLMODE = amusは悪い考えです。システム上のすべてのファイル(あなたより新しいバージョン)を古いものと置き換えます。 3)恒久的とは永久的であることを意味する。セットアップで永続的なfalseを設定しても、ファイルは常に保持されます。あなたはこのようにハッキングしますhttps://stackoverflow.com/questions/42284519/how-can-i-undo-permanent-flag-in-visual-studio-setup-project – PhilDW

0

データファイルをインストールし、それを更新するプログラムを実行すると、そのファイルまたはデータベースにユーザーデータが追加されます。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370531(v=vs.85).aspx

を基本的にはそのデータベースをインストールする製品を出荷するために悪い考えのようになります。ファイルの上書きルールが変更されたデータファイルは、VSのセットアップを行うアップデートの種類に交換することはできません。ユーザーは潜在的に大量のデータを更新し、新しいバージョンの製品でデータベース全体を削除することができます。あなたのアプリがどのようにアップデートを扱うのかはわかりません(追加されたボタンやラベルを完全に失ってしまったり、何らかの方法で保存しておきたいのですか?)ので、解決策を推奨するのは難しいですが、データベースを削除するアクション、またはアップグレード時に、既存のDBに更新を追加するのではなく、それを削除してから再起動します。

+0

私たちの場合、メインアプリケーションに2つのAccessデータベースが同梱されています。最初のものはフロントエンドとして機能し、2番目のものはバックエンドとして機能し、データを含むすべてのテーブルを扱います。したがって、フロントエンド(フォーム)のオブジェクトによって行われたすべての呼び出しは、バックエンドのテーブルにリンクされます。バックエンドは決して変更されないので、このファイルを永久に設定しました。フロントエンドは変更の対象となるため、このファイルを置き換える必要があるのはこのためです。 – kaycee

+0

私は解決策を見つけました。記事の私の答えを見てください。 – kaycee

関連する問題