2009-05-08 15 views
0

Je viens de terminer une application WinForms et son fonctionnement est parfait! Maintenant, il est temps de déployer. Le problème est, que je ne veux pas créer un fichier d'installation, mais plutôt un seul exécutable, par exemple 'myApp.exe'. La raison pour cela, c'est parce qu'il sera redistribué sur un support CD, et il est supposé fonctionner automatiquement comme une application autonome lorsque le CD est inséré dans le PC d'un utilisateur.Problème de déploiement Windows Forms C# .net

Une pensée ici? Deuxièmement, comment puis-je créer une référence aux fichiers '.txt' contenus dans le CD à partir de l'application? Je veux fournir des liens vers les fichiers, mais je ne sais pas comment faire la référence du chemin.

TIA ... Je suis vraiment perplexe ici!

Répondre

1

@Shalan, re: votre réponse:

attention! Vous allez déranger vos utilisateurs et les programmeurs de maintenance! J'ai vu et corrigé cette erreur au moins quelques dizaines de fois.

Etes-vous sûr de savoir quel est le répertoire actuel? OpenFileDialog et SaveFileDialog peuvent le modifier, par exemple, et vous ne parvenez pas à trouver votre fichier .dot. Et si l'utilisateur démarre l'application avec un répertoire de travail différent? Alors tu échouerais aussi. N'oubliez pas que vous ne pouvez pas contrôler votre répertoire de travail: votre application échouera si l'utilisateur le remplace par défaut.

Si vous devez trouver le chemin de l'exécutable de l'application, utilisez Application.StartupPath et System.IO.Path. E.g:

string dotSubPath = System.IO.Path.Combine("Assets", "MyDocument.dot"); 
string templatePath = System.IO.Path.Combine(Application.StartupPath, dotSubPath); 

Ceci obtiendra toujours le chemin basé sur le répertoire de démarrage de l'application, pas seulement le répertoire de travail.

+0

WOAH! merci pour le heads-up, Greg! Comme je l'ai mentionné en haut, les fichiers de version seront copiés sur CD et l'exécutable EXE partira directement de la racine de ce CD. Mais parce que la lettre de lecteur des lecteurs optiques des utilisateurs sera inconnue, j'ai choisi d'aller avec la route susmentionnée à la place. Aucune boîte de dialogue n'est utilisée dans l'application, et je dois admettre que cela semble fonctionner. S'il vous plaît expliquez-moi ce que l'on entend par "répertoire de travail" est cette instance. Merci! – Shalan

+0

... Dans ce cas .... – Shalan

+0

Il semblera fonctionner b/c le répertoire par défaut est le répertoire exécutable. Cependant, vous ne pouvez pas garantir que les utilisateurs l'exécuteront toujours avec la configuration par défaut. Le répertoire de travail actuel peut être modifié de nombreuses façons. Il n'y a pas de coût supplémentaire pour le faire de la bonne façon non plus. Par exemple, pouvez-vous être sûr qu'aucune version future de ce programme, jamais, utilisera un dialogue? Bien sûr que non. –

1

Vous pouvez utiliser des ressources incorporées dans le exe au lieu de fichiers séparés: http://jopinblog.wordpress.com/2007/11/12/embedded-resource-queries-or-how-to-manage-sql-code-in-your-net-projects/

+0

Ok, c'est cool. Mais cela fonctionnerait-il dans ce cas ... Im using PIA de Microsoft Office, ainsi Im employant réellement la fusion de courrier pour écrire à quelques champs de modèle dans un document modèle de '.dot de MS Word. Devrais-je encore intégrer cela? – Shalan

+0

Oh, désolé ... vous référez-vous aux DLL qui sont construites lors de la compilation? – Shalan

+0

Non, vous pouvez intégrer n'importe quel type de fichier. Je ne suis pas sûr de la partie MS Office. – JohnOpincar

2

Lorsque vous faites référence à des fichiers « » txt dans votre code, il suffit d'utiliser le chemin relatif où l'application est en cours d'exécution à partir. Par exemple si vos fichiers .txt sont dans le même répertoire que l'exécutable, référez-vous à eux sans aucun chemin ("filename.txt") ou vous pourriez utiliser (". \ Filename.txt").

En ce qui concerne l'installation de votre application, assurez-vous de ne pas utiliser de bibliothèques tierces qui auraient besoin d'être installées sur les clients et de graver le contenu de votre répertoire apps/bin/et d'utiliser autorun.ini fichier pour lancer votre exe.

+0

hey devSolo! merci pour ça!Je garde généralement tous mes fichiers dans un dossier appelé "assets", donc je peux référencer le fichier txt en tant que ". \ Assets \ file.txt", non? J'utilise dlls tiers, mais sous le dossier Références dans la solution xplorer Ive définir leur propoerty "copy local" à true. Une chose cependant, dans le passé quand j'ai construit une solution, 2 dossiers apparaissaient sous bin - "debug" et "release", ce dernier n'est plus là. Je sais que c'est celui à utiliser, mais ne semble pas le voir. Désolé, ça fait un moment que j'ai construit une application Winforms! merci! – Shalan

+0

Oui, le fichier ". \ Assets \ file.txt" fera référence au dossier assets dans le même chemin que votre exécutable. Et tant que vos dll n'ont pas besoin d'être enregistrées et doivent simplement être référencées dans votre application, elles fonctionneront correctement. Je crois que c'est ce qu'on appelle le déploiement xcopy (faute d'un meilleur terme). Et en ce qui concerne vos binaires de version manquants, vous pouvez basculer entre le débogage et la libération en cliquant sur (dans Visual Studio) Build-> Configuration Manager ... et vous pouvez ensuite modifier la configuration de la solution Active. La barre d'outils "Standard" dispose également d'une liste déroulante avec eux. – devSolo

+0

Merci pour l'aide devSolo! Va certainement vérifier cela – Shalan

0

Pour les intéressés, ce qui a également travaillé pour moi, où je avais besoin d'un chemin de référence de l'exécutable de l'application, est d'utiliser « Environment.GetCurrentDirectory »

Ainsi, par exemple, j'ai fourni le chemin de mon MS Word. dot modèle comme:

Object templatePath = Environment.GetCurrentDirectory + "\\Assets\\MyDocument.dot"; 
+0

Veuillez ne pas le faire, c'est incorrect dans le cas général. –

Questions connexes