2012-03-05 3 views
0

Я хотел был бы иметь возможность заменить файл, который упакован в наш msi с внешним, который пользователь предоставляет (Он отменяет некоторые настройки, характерные для установки компании программное обеспечение), а также скопировать папку из файлов (возможно, может или не существовать, содержимое часто меняется) в папку назначения.Скопируйте возможные файлы в местоположение с помощью msi/custom action

Мой текущий подход состоял в том, чтобы иметь папку и файл вместе с msi в папке или на компакт-диске и использовать настраиваемое действие для поиска папки и файла в той же папке, что и msi. Это работает нормально, пока установщик запускается с локального компьютера. Когда установщик запускается из сетевого расположения, пользовательское действие не может попасть в папку, в которой находится msi из-за ограниченных разрешений.

Есть ли способ обойти проблему с разрешениями, или есть лучший способ получить эти файлы в нужное место?

+0

Если вы просто хотите сделать некоторые файлы вашего смены установщика, вы можете установить «PackageAs = vsdpaLoose». Эти файлы затем ожидаются в той же папке, что и msi. Вы также можете установить «Vital = false», если они не требуются. Внутри вашего проекта установки они обрабатываются так, как они были частью msi. – nik

+0

@milter Это хорошая идея, но Vital = False не совсем работает, так как программа установки все еще терпит неудачу, если она не может найти файл. Кажется, что свойство имеет значение только тогда, когда msi попытался установить файл, и он терпит неудачу или нет. – Septih

+0

Да, вы правы, извините. Совсем недавно я возился с этим. Установщик все равно не работает, но предлагает возможность игнорировать и продолжать. Поэтому он успешно завершит установку, но он не выглядит хорошо для пользователя. Тем не менее, вы можете использовать файл контейнера, который может быть пустым или нет (например, zip). – nik

ответ

0

Мое решение состояло в том, чтобы сохранить местоположение msi в файле в установочном каталоге во время пользовательского действия, а затем использовать фактическую программу для поиска внешних файлов и их копирования (поскольку программа имеет доступ к ним). Это не элегантно, но, похоже, это работает для клиентов, которые его попробовали.

0

Чтобы работать во всех сценариях с пользовательскими действиями, вам необходимо выполнить два действия. Первые запускаются с олицетворением (несистемный контекст) и копиями из исходного местоположения на что-то вроде TempFolder. Второй выполняется без олицетворения (системный контекст) и копирует из TempFolder в целевое местоположение.

Вы также можете исследовать технику, которая называется semi-custom actions, где вы заполняете таблицу DuplicateFile или MoveFile с информацией во время выполнения. В идеале это позволит вам использовать встроенные возможности и все равно получит желаемый доступ, но я сам не проверил поведение.

+0

По умолчанию пользовательское действие должно выполняться с олицетворением, не так ли? Я знаю, что у нас был скрипт, чтобы установить бит noimpersonate для этого действия раньше, но даже с удаленным действием не удалось получить доступ к исходному каталогу. Я посмотрю на полу-пользовательские действия, но они выглядят так, как будто они будут легче работать с wix, а не с визуальным инструментом студии. – Septih

Смежные вопросы