Подтвердить что ты не робот

Как исправить исключение "Исходный проект с неподтвержденным действием"?

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

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

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

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

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

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

У меня есть подозрение, что это может быть одна из зависимостей, которые пытается загрузить проект установки. Возможно, что-то добавляется к строке 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.

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

Должно быть:

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

(закрывающая цитата на [EDITB1])