Ошибка загрузки файла или сборки - PullRequest
2 голосов
/ 11 мая 2010

Я работаю над программой установки, которая создает MSI-файл.С ним связана программа CustomAction, написанная на C #.В этой программе CustomAction есть три ссылки на COM-объекты, которые необходимы для ее работы.Они заключаются в следующем.

  1. Предоставление активного пространства имен IIS DS (C: \ Windows \ System32 \ inetsrv \ adsiis.dll)
  2. Объектная модель хоста сценариев Windows (C: \ Windows \ System32 \wshom.ocx)
  3. NetFwTypeLib (C: \ Windows \ System32 \ FirewallAPI.dll)

В качестве дополнительной информации ниже приведены задачи, которые я использую эти библиотеки DLL в своей программеfor.

  1. Чтобы установить параметры MIME для определенного типа файла.
  2. Чтобы создать ярлык на рабочем столе для папки.
  3. Чтобы зарегистрировать программу какисключение брандмауэра

.

Теперь вот моя проблема.Когда я перестраиваю программу на C # и запускаю программу CustomAction из Visual Studio, она работает нормально, и я могу выполнить три вышеупомянутые задачи, как чудо.Однако, когда я на самом деле собираю MSI и пытаюсь выполнить его и установить программу в моей системе, выдает ошибку.Я использую японскую ОС, поэтому она выдает ошибку на японском, поэтому я постараюсь перевести сообщение об ошибке на английский как можно лучше.Ошибка выглядит примерно так:

*

Файл или сборка 'Interop.IISOle, Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = null' или одна из ееЗависимости не могут быть загружены.Не удается найти указанный файл.

*

Это конкретное сообщение об ошибке выдается, поскольку оно относится к первому dll (adsiis.dll), поскольку оно содержит пространство имен IISOle.,Точно так же он выдает сообщения об ошибках, относящиеся ко всем трем объектам COM, на которые я ссылался из моей программы.Теперь я могу понять, что когда этот код находится внутри MSI-файла, он не может найти соответствующие COM-объекты.Я действительно сбит с толку, почему это происходит, поскольку программа установки выдает ту же ошибку, когда я пытаюсь установить программу даже на тот же компьютер, который я использовал для кодирования CustomAction.Как ни странно, он работает безупречно благодаря интерфейсу Visual Studio.Пожалуйста, помогите мне с этим.Заранее спасибо!

Обратите внимание, что я работаю в Windows Vista Business, но мне нужно, чтобы моя программа установки могла быть установлена ​​на различные ОС Windows, от Windows Server 2003 до Windows 7.

Ответы [ 2 ]

4 голосов
/ 22 июня 2012

Только что столкнулся с этим сегодня. Перейдите к разделу «Включение или отключение функций Windows» и охватите все, что есть в IIS, включая содержимое IIS 6.

Убедитесь, что функция «Совместимость конфигурации IIS Metabase и IIS 6» установлена ​​в разделе «Службы IIS 6»> «Инструменты управления веб»> «Совместимость управления IIS 6».

1 голос
/ 13 мая 2010

Антон, наконец-то я выяснил, в чем дело.

Когда я ссылаюсь, например, на dsiis.dll, Visual Studio помещает модуль Interop, а именно Interop.IISOle.dll, в каталог bin моей программы CustomAction. Здесь также можно найти CustomAction.exe. Это делает тот же процесс, когда я ссылаюсь на два других COM-объекта; wshom.ocx и FirewallAPI.dll. Но моя настоящая программа установки, написанная с использованием Wix, копирует этот файл CustomAction.exe в какой-то другой каталог, а MSI использует этот конкретный файл CustomAction.exe. Проблема возникает из-за того, что Interop.IISOle.dll (и другие также) не могут быть найдены там. (Сообщение об ошибке говорит, что мне нужно было искать с самого начала, кажется; я был глуп, чтобы не искать его, но думал, что могут быть большие проблемы)

Так вот, что я и сделал. Я дал указание проекту Wix скопировать эти файлы Interop DLL в то же место, где находится файл CustomAction.exe, используемый установщиком. Это так легко решило проблему.

Я совершенно новичок, когда дело доходит до Wix, плюс нам нужно использовать CustomAction для 2 и 3 по некоторым причинам.

...