2010-11-17 5 views
1

Je suis confronté à un problème lors du déploiement d'une application WPF autonome. J'ai un énorme fichier .zip de fichiers pdf que je veux inclure dans le déploiement. Est-il possible de les ajouter à un clic une fois le déploiement et de décompresser le fichier d'installation dans un répertoire spécifique sur l'ordinateur de l'utilisateur?WPF Déploiement avec un fichier .zip supplémentaire

Donc, en gros, ce que je cherche est:

utilisateur installe l'application WPF installateur WPF décompresse pdfs dans C:/unrépertoire/PDFS d'application WPF peut maintenant utiliser ces PDFS comme il est ressource.

Merci!

Répondre

3

Par conception ClickOnce ne vous permet pas d'exécuter des étapes arbitraires lors de l'installation. Mais étant donné les autorisations nécessaires, il n'existe aucune restriction sur ce qu'une application ClickOnce peut faire la première fois qu'elle s'exécute.

La solution la plus courante consiste à vérifier au démarrage de l'application si le fichier zip volumineux a été décompressé, et sinon, il décompresse les fichiers PDF dans le répertoire. Cela peut être fait avec SharpZipLib ou de toute autre manière.

Une solution alternative consiste à utiliser un exécutable d'amorçage non-ClickOnce qui décompresse les fichiers et exécute également l'installation de ClickOnce.

Voir this article pour une explication des raisons pour lesquelles ClickOnce n'autorise pas les étapes d'installation personnalisées, ainsi que des informations supplémentaires sur la façon de contourner ce problème. Si les fichiers PDF se trouvent dans le répertoire de l'application ClickOnce, une troisième option consiste à les inclure dans le déploiement ClickOnce lui-même. L'inconvénient de ceci est que vous perdez la compression (sauf qu'un serveur peut compresser les fichiers si vous déployez sur HTTP).

Si votre application utilise les fichiers PDF en interne, une autre solution consiste à inclure le fichier .zip volumineux dans le manifeste, décompressant les fichiers PDF individuels au moment où ils sont nécessaires. Par exemple, ils peuvent être décompressés à l'aide de SharpZipLib et écrits à l'aide de File.WriteAllBytes(Path.GetTempFileName() + ".pdf", ...) ou chargés directement dans le composant qui les utilise. Si vous écrivez dans le répertoire temp, vous aurez besoin d'un mécanisme pour nettoyer les fichiers que vous n'utilisez plus.

L'une ou l'autre de ces deux solutions serait plus propre que de copier les fichiers PDF sur un chemin fixe, car l'application ClickOnce sera autonome et désinstallera complètement.

+1

"un serveur peut compresser les fichiers si vous déployez sur HTTP" ... la compression des applications ClickOnce avec le serveur Web est souvent négligée. Une configuration IIS type ne compresse pas les fichiers .deploy automatiquement, mais cela vaut vraiment la peine d'être analysé. Il économise une tonne de bande passante. – codeConcussion

Questions connexes