2010-05-26 2 views
1

J'ai un service qui doit être déployé sur une machine client.L'application .net ne fonctionnera pas. Lors de la compilation sur une machine distante (mêmes sources), cela fonctionne. Pourquoi?

La machine de destination est 64 bits. Ma machine dev est également 64 bits. L'application est vraiment simple, écoute sur un port et fait des choses db. Il cible .net 3.5

Quand je Déployez le anycpu, le X64 ou la version X86, la chose ne sera pas installé sur la machine du client.

j'ai vérifié dependencywalker et listes: devmgr.dll ieshims.dll wer.dll

de toute façon ... installer Visual Studio 2008 sur la machine clients ... vérifier toutes les sources. Je ne change rien et compile. Copiez l'exe sur ses emplacements de destination ... et que savez-vous ... ça marche. Dependencywalker répertorie toujours les mêmes problèmes de dépendance.

Comment peut-il que l'acte de la compilation sur cette machine me donne un autre exe?

Edit: Quand je dis qu'il n'installe pas. Je veux dire que InstallUtil donne des erreurs:

Une exception est survenue au cours de la phase d'installation. System.InvalidOperationException: Impossible d'obtenir les types de programme d'installation dans l'assembly C: \ services \ incomingnotifications \ IncomingNotifications.exe. à System.Configuration.Install.AssemblyInstaller.InitializeFromAssembly() à System.Configuration.Install.AssemblyInstaller.Install (IDictionary savedSt mangé) à System.Configuration.Install.Installer.Install (IDictionary stateSaver) à System.Configuration .Install.TransactedInstaller.Install (IDictionary enregistré State) L'exception interne System.Reflection.ReflectionTypeLoadException a été levée avec h le message d'erreur suivant: Impossible de charger un ou plusieurs des types requis . Récupérer la propriété LoaderExceptions pour plus d'informations .. à System.Reflection.Module._GetTypesInternal (StackCrawlMark & stackMark) à System.Reflection.Module.GetTypes() à System.Configuration.Install.AssemblyInstaller.GetInstallerTypes (Assemblée Assem) à System.Configuration.Install.AssemblyInstaller.InitializeFromAssembly()

également ... avant de compiler avec Visual Studio, j'ai vérifié que le service ne serait toujours pas installé. Après la compilation, cela a fonctionné.

Éditer2: Le compiler à nouveau sur le devmachine et envoyer le binaire, entraîne les mêmes erreurs. Me donne localement Compiler un exe qui fonctionne

+0

Vous dites qu'il ne s'installe pas sur la machine du client; voulez-vous dire qu'un programme d'installation (par exemple, Setup.exe) ne se termine pas correctement ou que l'application EXE ne s'exécute pas, après l'installation? Eithr façon, pouvez-vous fournir des numéros d'erreur/messages? –

+1

1) EXCEPTIONS EXCEPTIONS EXCEPTIONS 2) fuslogvw.exe 3) Windows Update Windows Update Mise à jour – Will

+3

"J'installe Visual Studio ... Je ne change rien": L'installation VS est un joli * gros * changement. –

Répondre

1

Il est pas très clair ce que votre problème est exactement, comme vous le dites ne sera pas installé sur la machine. Que voulez-vous dire? l'installation échoue? ou êtes-vous simplement en train de le copier et d'essayer de l'exécuter? Avez-vous des messages d'erreur?

avez-vous installé le service? ou est-ce fait dans le cadre de la construction? cela pourrait expliquer pourquoi la copie sur la machine ne fonctionne pas mais la construction le fait ... Est-ce que l'exe compilé sur la machine dev fonctionne une fois que vous avez installé VS sur la nouvelle machine?

Je vérifie d'abord que votre machine cible a la version correcte de .net, car l'installation de VS la mettrait en place si ce n'était pas le cas.

Je voudrais utiliser un outil comme procmon pour voir ce qui se passe lorsque le service est démarré, pour vérifier que ce n'est pas une DLL qui manque.

Un peu plus d'informations peut aider à obtenir une réponse un peu plus rapide ...

EDIT:

Après avoir modifié à l'exception je l'ai fait un peu de googler et est tombé sur this thread qui suggère quelques options , mais la principale qui semblait guérir pour certains (en supposant que vous n'avez pas des dépendances qui ne peuvent être résolus) est que vous n'êtes pas d'exécuter l'installation util en tant qu'administrateur:

citer le fil:

Vous rencontrez un 'utilisateur standard'. Je suppose que vous êtes peut-être en cours d'exécution sur un compte membre du groupe d'administration local, mais avec Vista UAC activé, même les administrateurs s'exécutent en tant qu'utilisateur standard jusqu'à ce qu'ils exécutent une demande d'administration explicite. obtenir une invite d'élévation d'administrateur. InstallUtil.exe n'est pas marqué comme nécessitant explicitement l'administration, donc cela échoue.

Créez un script cmd qui exécute InstallUtil youService.exe et définissez le script sur require admin ou effectuez un 'runas/user: Administrator cmd.exe' et lancez InstallUtil à partir de là.

et si ce n'est pas la question alors un autre gars suggère:

Je trouve que l'installation fonctionne lorsque j'utilise le InstallUtil.exe dans le cadre de 32 bits, mais génère le System.Reflection.ReflectionTypeLoadException lorsque exécuter le InstallUtil.exe dans l'infrastructure 64 bits. Est-ce que c'est un paramètre que j'ai besoin de mettre dans mon projet ou une structure que j'inclus qui n'est pas supportée par 64 bits? (bien que je pensais que c'était rétrocompatible).

Je ne sais pas si l'une de ces aidera, mais vous ne savez jamais ...

+0

J'ai mis à jour ma question un peu avec vos commentaires – Toad

+0

J'ai mis à jour la réponse. j'espère peut contenir quelques informations utiles ... –

+0

titulaire: merci. Malheureusement, le fichier est installé à partir de la même invite de commande, avec le même installutil lorsque le fichier est créé localement et copié à cet emplacement. Quand je reçois l'exe du dev, ce n'est pas le cas. Je ne l'ai donc pas considéré comme une option. – Toad

0

A partir de la version .NET Framework 2.0, la version 32 bits du Common Language Runtime (CLR) continue à expédier avec uniquement la version 32 bits de l'outil Installer, mais la version 64 bits du CLR est fournie avec une version 32 bits et une version 64 bits de l'outil Installer. Lors de l'utilisation du CLR 64 bits, utilisez l'outil d'installation 32 bits pour installer des assemblys 32 bits et l'outil d'installation 64 bits pour installer des assemblys de langage intermédiaire 64 bits et Microsoft. Sinon, les deux versions de l'outil Installer se comportent de la même manière.

Source

+0

Je l'ai vérifié ... En essayant l'autre installutil, j'obtiens: BadImageException. Une tentative a été faite pour charger un programme avec un format incorrect. "Ceci est une erreur différente de celle que j'ai, donc j'utilise le bon installutil – Toad

+0

Si vous avez une mauvaise image, vous pouvez essayer d'utiliser l'outil CorFlags (http://msdn.microsoft.com/en-us/library/ms164699%28VS.80%29.aspx) pour vous assurer que vos assemblages sont configurés en 32 bits même s'ils s'exécutent sur une machine 64 bits. passé avec des produits tiers (pas de services cependant) lorsque nous avons déplacé les applications .NET à partir d'un serveur 32 bits vers un serveur 64 bits – kd7

0

Ne pas utiliser le installutil du dossier Framework 64. utilisez le dossier de cadre standard. Il devrait fonctionner à partir de là même si vous l'exécutez sur un ordinateur 64.

Questions connexes