2010-05-11 4 views
2

Je travaille sur un programme d'installation qui crée un fichier .msi. Il y a un programme CustomAction associé qui est écrit en C#. Il y a trois références d'objet COM faites dans ce programme CustomAction qui sont nécessaires pour que cela fonctionne. Ils sont comme suit.Le fichier ou l'assemblage ne peut pas être chargé Erreur

  1. Active DS IIS Namespace fournir (C: \ Windows \ System32 \ inetsrv \ Adsiis.dll)
  2. Windows Script Object Model Host (C: \ Windows \ System32 \ Wshom.ocx)
  3. NetFwTypeLib (C: \ Windows \ System32 \ FirewallAPI.dll)

Comme les informations ajoutées, après les tâches que j'utilise ces DLL dans mon programme.

  1. Pour définir les paramètres MIME pour un type de fichier particulier.
  2. Pour créer un raccourci sur le bureau vers un dossier.
  3. Pour enregistrer un programme en tant qu'exception pare-feu

.

Maintenant, voici mon problème. Lorsque je reconstruis le programme C# et exécute le programme CustomAction à partir de Visual Studio, cela fonctionne très bien et je peux faire les trois tâches ci-dessus comme un charme. Cependant, quand je compile réellement le .msi et essaye de l'exécuter et installe le programme sur mon système, il donne une erreur. J'utilise un système d'exploitation japonais de sorte qu'il donne l'erreur en japonais, donc je vais essayer de traduire le message d'erreur en anglais du mieux que je peux. L'erreur est quelque chose comme ceci:

*

fichier ou l'assembly 'Interop.IISOle, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null', ou une de ses dépendances pourrait ne pas être chargé. Impossible de trouver le fichier spécifié.

*

Ce message d'erreur particuler est donnée car elle se rapporte à la première dll (Adsiis.dll) parce qu'il est celui qui contient l'espace de noms IISOle. De même il donne des messages d'erreur relatifs à tous les trois objets COM auxquels j'ai fait référence depuis mon programme. Maintenant ce que je peux comprendre de ceci est, d'une manière ou d'une autre quand ce code est dans le dossier .msi il ne peut pas trouver les objets COM appropriés. Je suis vraiment confus pourquoi cela se produit comme le programme d'installation donne la même erreur lorsque j'essaye d'installer le programme même sur la même machine que j'ai utilisée pour coder le CustomAction. Curieusement, il s'exécute parfaitement avec l'interface Visual Studio. S'il vous plaît, aidez-moi avec ça. Merci d'avance!

Notez que je travaille sur Windows Vista, mais je besoin de mon installation pour pouvoir installer sur une variété de système d'exploitation Windows, de Windows Server 2003 à Windows 7.

+0

Vos actions sont-elles exécutées différées? De plus, vous n'avez pas besoin d'écrire vos propres actions personnalisées au moins pour 2. et 3., utilisez celles de Wix! –

Répondre

1

Anton, enfin j'ai découvert ce qui était faux.

Lorsque je référence, par exemple, dsiis.dll puis Visual Studio place un module Interop, à savoir Interop.IISOle.dll dans le répertoire bin de mon programme CustomAction. C'est où le CustomAction.exe peut également être trouvé. Il fait le même processus lorsque je référence les deux autres objets COM; wshom.ocx et FirewallAPI.dll. Mais mon programme d'installation réel qui est écrit en utilisant Wix copie ce CustomAction.exe dans un autre répertoire et le fichier .msi utilise ce fichier CustomAction.exe particulier. Le problème se produit puisque Interop.IISOle.dll (et les autres aussi) ne peut pas être trouvé là. (Le message d'erreur disait ce que je devais rechercher depuis le début, il semble que j'étais stupide de ne pas le chercher mais je pensais qu'il pourrait y avoir de plus gros problèmes)

Donc c'est ce que j'ai fait. J'ai demandé au projet Wix de copier ces fichiers DLL Interop au même endroit où réside le fichier CustomAction.exe utilisé par le programme d'installation. Cela a résolu le problème si facilement. Je suis totalement novice quand il s'agit de Wix, et nous devons utiliser le CustomAction pour 2 et 3 pour certaines raisons.

4

Je viens de le rencontrer aujourd'hui. Accédez à "Activer ou désactiver les fonctionnalités Windows" et explorer tout ce qui se trouve sous IIS, y compris les éléments IIS 6. Assurez-vous que la fonctionnalité "Configuration de la métabase IIS et IIS 6" est cochée, sous "Internet Information Services"> "Outils de gestion Web"> "Compatibilité de gestion IIS 6".

+0

Merci à Damian Vogel pour l'option spécifique requise. – maxwellb

+0

Haha thx pour la mention de toute façon, j'ai vu seulement maintenant que mon édition a été rejetée par la communauté "trop ​​amicale". La chose importante est que l'information n'est pas perdue. –

Questions connexes