Как исправить исключение «Установочный проект с файлом пользовательского действия не найден»? - PullRequest
23 голосов
/ 23 декабря 2010

Я пытаюсь создать проект установки для службы Windows.Я следовал указаниям http://support.microsoft.com/kb/816169, чтобы создать проект установки без проблем.

Я хочу иметь возможность получить значение во время установки, чтобы обновить app.config желаемыми настройками пользователя.Я добавил диалог Textboxes (A) для получения значений.Я установил для свойства Edit1Property значение «TIMETORUN», а в свойстве основного действия « CustomActionData » я добавил следующее: / TimeToRun = "[TIMETORUN] \" .Все идет нормально.Запустив установку, я могу получить значение TimeToRun из коллекции Context.Parameters без проблем.

Чтобы найти файл app.config, мне также необходимо передатьзначение свойства установщика Windows TARGETDIR для моего настраиваемого действия.Здесь вещи начинают разваливаться.Для этого необходимо изменить CustomActionData следующим образом: / TimeToRun = "[TIMETORUN] \" / TargetDir = "[TARGETDIR] \" .Теперь, когда я запускаю установку, я получаю следующее сообщение об ошибке:

Ошибка 1001. Исключительная ситуация при инициализации установки.System.IO.FileNotFoundException: Не удалось загрузить файл или сборку 'file: /// C: \ Windows \ SysWOW64 \ Files' или одну из ее зависимостей.Системе не удается найти указанный файл.

Если вы решите эту проблему в Google, вы неизбежно найдете людей с огромным успехом, просто добавив косую черту в / TargetDir = "[TARGETDIR] \" часть CustomActionData .К сожалению, это не решает мою проблему.

Я пробовал так много разных вариантов строки CustomActionData , и ни один из них не работал.Я попытался войти в файл из моего переопределенного метода Install , чтобы определить, где произошла поломка, но файл журнала не создается, потому что он даже не зашел так далеко.Как указывает на ошибку, ошибка происходит на этапе инициализации.

Я догадываюсь, что это может быть одной из зависимостей, которые пытается загрузить проект установки.Возможно, что-то добавляется к строке CustomActionData и плохо воспроизводится со значением TARGETDIR (которое содержит пробелы, например "C: \ Program Files \ My Company \ Project Name"«).Опять же, это еще одна догадка, которую я не могу подтвердить из-за своей неспособности отладить процесс установки.

Еще одна вещь, которую стоит упомянуть, и да, это еще одна догадка, может ли это быть проблемой с установочными проектами на 64версия Windows?Я использую Windows 7 Professional.

Я предоставлю имена зависимостей, если это поможет:

  • Microsoft .NET Framework
  • Microsoft.SqlServer.DtsMsg.dll
  • Microsoft.SqlServer.DTSPipelineWrap.dll
  • Microsoft.SqlServer.DTSRuntimeWrap.dll
  • Microsoft.SQLServer.ManagedDTS.dll
  • Microsoft.SqlServer.msxml6_interop.dll
  • Microsoft.SqlServer.PipelineHost.dll
  • Microsoft.SqlServer.SqlTDiagM.dll

Как вы можете узнать из зависимостей WindowsСлужба планирует вызов в пакет DTSX.

Извините за длинную напыщенную речь.Спасибо за любую помощь, вы можете предоставить.

Ответы [ 2 ]

38 голосов
/ 24 декабря 2010

Ответ так безумно прост.Если последний аргумент в CustomActionData будет содержать пробелы и, следовательно, вам необходимо заключить его в кавычки и косую черту, у вас также должен быть пробел после косой черты, например:

/ TimeToRun = "[TIMETORUN] \ "/ TargetDir =" [TARGETDIR] \ "

Решение и объяснение можно найти здесь .

1 голос
/ 01 декабря 2016

Была похожая проблема. В моем случае это было странно, потому что мой установщик успешно запустился один раз, затем я успешно удалил свое приложение через «Установка и удаление программ», выполнил некоторое кодирование (НЕ трогал мою строку CustomActionData ) и перестроил мой проект и Настройка проекта. Когда я перезапустил MSI, я получил эту ошибку.

Кодирование, которое я сделал, состояло в том, чтобы ввести больше значений большего количества параметров, которые я указал в моей строке CustomActionData . Этот синтаксис для получения значений параметров (то есть string filepath = Context.Paramenters["filepath"]), который был в моем классе Installer, был на самом деле хорошим, но, как я выяснил, синтаксис более поздних параметров, которые я сейчас пытался получить из моего CustomActionData строка не была правильной, с самого начала. Я не смог добавить вторую кавычку вокруг одного из этих параметров, поэтому ничего другого получить не удалось.

Я использовал окна «Текстовые поля (А)» и «Текстовые поля (В)» в разделе «Интерфейс пользователя». A имеет 1 блок EDITA1, где я получаю путь к файлу, а B имеет 2 блока EDITB1 и EDITB2 для некоторых параметров базы данных. Моя CustomActionData строка выглядела так:

/filepath="[EDITA1]" /host="[EDITB1] /port="[EDITB2]" 

Это должно было быть:

/filepath="[EDITA1]" /host="[EDITB1]" /port="[EDITB2]" 

(заключительная цитата [EDITB1])

...