2010-01-16 11 views
3

J'ai fait une simple application WPF dans Visual Studio.Comment puis-je déployer une application WPF avec ClickOnce qui accède à un fichier de base de données MDF local?

Il accède à son propre fichier de base de données dans son propre répertoire avec cette chaîne de connexion:

System.Environment.CurrentDirectory + @"\Data\" + databaseFileName; 

Je cliqués Publish et fondamentalement accepté tous les paramètres par défaut (édition de CD/DVD, pas de mise à jour en ligne).

J'ai copié le dossier d'installation sur un autre ordinateur. Sur le nouvel ordinateur, j'ai double-cliqué sur setup.exe.

Il installe très bien, est dans le menu de démarrage, mais quand il fonctionne, il obtient cette erreur :

alt text http://www.deviantsart.com/upload/11jfc2c.png

J'ai donné l'application toutes les autorisations je peux dans le projet/propriétés/sécurité:

alt text http://www.deviantsart.com/upload/si6urj.png

Que dois-je changer pour que cette application déployée avec ClickOnce puisse trouver sa base de données dans le répertoire relatif sous le fichier .exe, c'est-à-dire "Data/MainData.mdf"?

ADDENDA Le correctif dans la réponse ci-dessous fonctionne pour Windows 7, mais sur Windows XP, je reçois ceci:

alt text http://www.deviantsart.com/upload/1pds19l.png

Répondre

4

D'abord, vous déployez comme données et votre connexion chaîne montre cela. DataDirectory traduit vers le dossier de données sous le cache ClickOnce, et c'est où ClickOnce met le fichier si vous l'avez marqué comme données.

Si vous ne voulez pas qu'il soit déployé ici, mais que vous le vouliez par rapport à [exe], allez dans la boîte de dialogue Fichiers d'application de l'onglet Publier et remplacez-le par Inclure (Données). Ensuite, il va le mettre dans un emplacement par rapport à l'emplacement de l'exe. (I.E. si vous l'avez dans un dossier dans votre projet, il le mettra dans le dossier correspondant sous l'exe déployé). N'oubliez pas de changer votre chaîne de connexion.

Si vous le déployez dans cet emplacement, il sera perdu lorsque vous publiez des mises à jour. (Juste pour que vous sachiez). Voici une idée où que vous pouvez mettre vos données pour éviter ce problème:

How to keep your data safe from ClickOnce updates

Vous devez créer la chaîne de connexion dynamique, Path.Combine (System.Windows.Forms.Application.StartupPath, " Data \ mydatabase.mdf "); ou il démarrera dans le chemin par défaut de l'assembly actuel (.NET dans votre cas).

--addition--

Argh, WPF, désolé, échappé.Vous avez besoin essentiellement pour obtenir le dossier de votre exe fonctionne en voir si cela aide.

Dans l'espace de noms System.Reflection:

Assembly assemblyInfo = Assembly.GetExecutingAssembly(); 
if (assemblyInfo != null) 
{ 
    //try Path.GetDirectoryName(assemblyInfo.Location) 
    //if that doesn't work, try assemblyInfo.CodeBase 
} 

(dans les applications VSTO, vous devez utiliser CodeBase en raison de l'ombre de la DLL Je pense que la localisation fonctionnera pour l'application ordinaire.)

RobinDotNet