2010-09-08 3 views
0

Я добавил некоторые пользовательские действия в наш установщик, который запускается на CE5 и WM6. Этот установщик отлично работает и прекрасно работает. Однако есть одно раздражение. Программа setup.dll развернута на устройстве, и этот файл не требуется.Исключить setup.dll из проекта Smart Cab Project в VS2008

Я прочитал несколько сайтов по созданию файла setup.dll, MSDN и даже мобильного SDK. Все они указывают один и тот же набор шагов.

  1. Создайте проект C++ dll.
  2. Убедитесь, что выход называется setup.dll.
  3. В проекте вашего кабинета щелкните по DL Setup, найдите папку приложения, добавьте вывод и выберите проект установки. (Вы не можете выбрать локальный каталог, его всегда каталог на целевом компьютере)

Теперь это работает и создает пользовательский инсталлятор кабины. Однако, как уже упоминалось, файл setup.dll копируется в папку приложения, даже если он не требуется после установки (даже для удаления)

Я попытался исключить файл setup.dll, установив исключение в true в его свойствах , Все это не включает файл a, поэтому файлы cab, которые нужно построить, поскольку файл setup.dll отсутствует.

В качестве такого единственного решения я пришел вручную изменения кабины .inf файл из

[DefaultInstall] 
CEShortcuts=Shortcuts 
AddReg=RegKeys 
CopyFiles=Files.Common1,Files.Common2,Files.Common3,Files.Common4 
CESetupDLL="Setup.dll" 

в

[DefaultInstall] 
CEShortcuts=Shortcuts 
AddReg=RegKeys 
CopyFiles=Files.Common1,Files.Common2,Files.Common3 
CESetupDLL="Setup.dll" 

Где Files.Common4 указал на файл setup.dll локально на машине. Выполнение этого изменения означает, что он используется для создания файла кабины, но файл не копируется.

Есть ли способ сделать это изменение в визуальной студии, или это всегда будет ручное редактирование файла .inf и ручной сборка файла кабины с помощью cabwiz.exe?

ответ

1

Я немного смущен. Вы создали расширение установщика setup.dll и включили его в CAB, но вы не хотите его на устройстве? Чтобы ваши пользовательские действия выполнялись во время извлечения CAB, DLL должна находиться в CAB и извлекаться на устройстве.

Если вы не хотите его использовать на устройстве, просто опустите его из CopyFiles и удалите запись CESetupDLL из INF. Очевидно, что это означает, что любые пользовательские действия, которые он определяет, не могут выполняться.

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

+0

Это именно то, чего я пытаюсь достичь. Используйте setup.dll для создания CAB-файла, но не скопируйте его на устройство. Я тоже не думал, что пользовательские действия будут выполняться без DLL. Но используя описанное выше решение setup.dll не установлено на устройстве (оно не помечено как скопированное), но при удалении мои пользовательские действия, похоже, запускаются. Его единственная незначительная проблема, которую я думал, будет легко исправить, и я упустил что-то очевидное. – JonWillis

+0

Устройство не волшебное. Пользовательское действие не может произойти без присутствия DLL на устройстве, поскольку он должен запускать некоторый код. Теперь, возможно, это не так, как вы думаете, но это абсолютно необходимо. Я предполагаю, что это как-то заканчивается в папке \ Windows - возможно, это работает версия, которую вы оттолкнули отладчиком.Я бы точно проверил CAB на полностью чистом (то есть был жестком сбросе) устройстве. – ctacke

+0

Я действительно задавался вопросом, как ему удалось запустить код деинсталляции без присутствия DLL, я согласен, что он должен где-то запускать собственный код ... Я предполагаю, что это было волшебным образом сохранено в другом месте, и установка файла setup.dll в папку приложения была излишней для требований , заданный при удалении файла кабины, запись данных о файлах хранится где-то в системе для wceload.exe для использования при удалении. Чистая загрузка ОС - единственный способ проверить это, чтобы убедиться, что она кэшируется из предыдущей установки. Я пытаюсь сделать это сейчас ... – JonWillis