0

Je tente de créer un projet d'installation de Visual Studio Installer qui déploie plusieurs projets C# et d'autres fichiers. Inclus dans ces autres fichiers, il existe des bases de données Access avec des formulaires qui nécessitent des mises à jour.Projet d'installation VS2015 ne pas mettre à jour la base de données Access incluse dans le package lors de la réinstallation

Pour illustrer le problème, je l'ai simplifié:

1- Créer un nouveau fichier de base de données d'accès, ajoutez une forme simple avec un bouton et une étiquette et l'enregistrer.

2- Ajouter le fichier au projet d'installation;

3- Set DetectNewerInstalledVersion et RemovePreviousVersion à true

4- Construire le projet.

5- Exécutez l'exécutable d'installation.

À ce moment-là, tout a bien fonctionné

6- Ouvrez à nouveau l'accès au fichier de base de données, ajoutez un bouton ou une étiquette à la forme, enregistrez-le.

7- Modifiez le numéro Version du projet d'installation, et en même temps le ProductCode comme suggéré par VS2015.

8- Reconstruire le projet d'installation.

9- Réinstallez le logiciel.

Attendu: les données d'accès doivent avoir été mises à jour avec le nouveau bouton/étiquette.

Ce qui se passe: Le fichier n'a pas été mis à jour.

Pourquoi est-ce? J'ai vu des gens parler du nombre de projets de la version Assembly inclus dans un projet d'installation, mais ce n'est pas mon cas puisque je ne déploie pas la sortie d'un projet. Je déploie simplement un fichier qui aurait dû être supprimé lors du processus de désinstallation.

Si je fais les mêmes étapes que décrites précédemment mais avec un fichier texte dans lequel j'ajoute du texte, cela fonctionne très bien, mais pour une raison quelconque, cela ne fonctionne pas avec une base de données Access.

Qu'est-ce qui ne va pas?

Répondre

0

J'ai trouvé une solution. Le fichier ne se mettait pas à jour car la date de modification avait changé.

De MSFT site:

Nonversioned fichiers sont données utilisateur-Si la date de modification est postérieure à la date de création du fichier sur l'ordinateur, ne pas installer le fichier car personnalisations seront supprimés. Si les dates de création modifiées et Créer sont identiques, installez le fichier. Si la date de création est après la date de modification, le fichier est considéré non modifié, installez le fichier.

Depuis que j'avais deux bases de données Access (frontend avec les formes, back-end avec les tableaux de données) et avait besoin d'une seule mise à jour (le frontend où les formes sont), voici la solution:

1) Remplacez la propriété REINSTALLMODE par amus au lieu de omus par défaut. Cela forcera la réinstallation de tous les fichiers. Pour ce faire, j'ai utilisé un PostBuildEventas explained here.

2) Définissez la propriété fichier back-end Permanent à true

3) Ajouter un Launch Condition: Search Target Machine pour vérifier si le fichier backend existe sur l'ordinateur. Nommez quelque chose comme BACKENDEXISTS

4) Ajouter une valeur Condition au fichier back-end dans la vue File System pour installer le fichier que si elle n'a pas été constatée par la Launch Condition. Dans ce cas, ce sera not BACKENDEXISTS. S'il s'agit d'une première installation, le fichier sera installé car il n'a pas été trouvé. S'il s'agit d'une mise à jour, il trouvera le fichier à cause de la propriété Permanent et ne le remplacera pas.

+0

1) L'explication des données modifiées est dans ma réponse - ce n'est pas clair pour moi pourquoi vous n'avez pas vu cela ou je ne l'ai pas précisé. 2) REINSTALLMODE = amus est une mauvaise idée - il va remplacer tous les fichiers sur le système (versions ultérieures que les vôtres) avec vos plus anciens. 3) Permanent signifie permanent. Le fichier restera toujours même si vous définissez la valeur false permanente dans votre configuration. Vous allez pirater comme ça https://stackoverflow.com/questions/42284519/how-can-i-undo-permanent-flag-in-visual-studio-setup-project – PhilDW

0

Si vous installez un fichier de données, puis exécutez un programme qui le met à jour, vous avez ajouté des données utilisateur à ce fichier ou à cette base de données. Les règles d'écrasement de fichiers ne permettent pas un fichier de données modifié pour être remplacé dans le genre de mise à jour des configurations VS faire:

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

Fondamentalement, ce serait une mauvaise idée d'expédier un produit qui installe une base de données l'utilisateur se met à jour avec des quantités potentiellement importantes de données, uniquement pour que la nouvelle version du produit supprime toute la base de données. Je ne sais pas comment votre application traite les mises à jour (voulez-vous que le bouton/étiquette ajouté soit complètement perdu, ou les enregistrez-vous d'une manière ou d'une autre?), Il est donc difficile de recommander une solution. Pour supprimer la base de données, vous pouvez ajouter les mises à jour à la base de données existante au lieu de la supprimer et de recommencer.

+0

Dans notre cas, nous livrons avec l'application principale deux bases de données Access. Le premier sert de frontal et le second de backend avec toutes les tables contenant les données. Par conséquent, tous les appels effectués par les objets dans le front-end (formulaires) sont liés aux tables dans le backend. Le backend ne changera jamais, donc j'ai mis ce fichier pour être permanent. Le frontal sera sujet à des changements et c'est pourquoi j'ai besoin de ce fichier pour pouvoir le remplacer. – kaycee

+0

J'ai trouvé une solution: voir ma réponse sur le post. – kaycee