2010-03-04 3 views
4

mise à jour automatique de mon application WPF, j'ai cette stratégie:FileNotFoundException parfois quand le lancement des applications

  • (1) process.exe commence
  • process.exe cherche mise à jour => il y a une mise à jour
  • process.exe fait une copie de lui-même => process_copy.exe
  • process.exe lancement process_copy.exe avec des paramètres "update"
  • de process.exe sort
  • (2) process_copy.exe commence
  • process_copy.exe voir les paramètres "update", mise à jour de téléchargement Process.exe
  • process_copy.exe lancement process.exe
  • process_copy.exe sort
  • process.exe commence

Notez que mon application utilise un DLL.

cette stratégie fonctionne, sauf quelques fois (pas à chaque fois) lorsque l'application est lancée au démarrage dans HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run

Parfois, il se bloque à (2), avec un

System.IO.FileNotFoundException était unhandled message = "Impossible de charger le fichier ou l'assembly 'ManagedWinapi, version = 0.3.0.0, Culture = neutral, PublicKeyToken = null' ou une de ses dépendances.

Je ne comprends pas pourquoi il peut tomber en panne. Si elle peut commencer en (1), pourquoi ne peut-elle (parfois) commencer en (2)?

Est-ce que quelqu'un a une explication?

Merci d'avance pour votre réponse

+0

Y a-t-il une raison pour laquelle vous ne pouvez pas utiliser ClickOnce? –

+0

La raison en est que c'est une application très simple, et n'a pas besoin d'un grand système de mise à jour. Mais je ne peux pas comprendre pourquoi il peut avoir une exception filenotfound alors que le fichier est ici ... – Tim

+0

Utiliser ClickOnce semble beaucoup plus simple que de faire votre propre système de mise à jour .... –

Répondre

0

finnaly, je l'ai intégré cette dll dans mon application, donc je n'ai plus dll ... c'est moche mais ça marche

0

Option 0: Connaissez-vous les dépendances de 'ManagedWinapi'? Sinon, utilisez Reflector pour les déterminer. Il peut y avoir un problème avec trouver un de ceux-là?

Option 1: Essayez d'exécuter ProcessMonitor pour déterminer ce qui manque spécifiquement à votre application. ("ou l'une de ses dépendances" - qui peut être n'importe quel nombre de choses

Option 2: Problème intermittent: votre opération de copie est-elle asynchrone ou êtes-vous absolument certain que "process_copy.exe" composants vous copierez ont été mis à jour?

0

Essayez d'utiliser le AppDomain.CurrentDomain.AssemblyResolve événement pour voir quoi et où sa recherche pour le fichier

Questions connexes