Ошибка удаления, если оригинальный установочный DVD не находится в дисководе
При попытке удалить наше приложение в окне "Установка и удаление программ" появляется следующая ошибка, и приложение не может быть удалено:
ошибка
'mFileBagIDE.dll' не является допустимым коротким именем файла.
Любопытно, что эта ошибка появляется только в том случае, если оригинальный установочный DVD-диск отсутствует в приводе. Если DVD находится в приводе, деинсталляция работает отлично.
Вот настоящий плюс: мы не улавливали эту ошибку до тех пор, пока наше приложение уже не было широко развернуто, и ситуации наших клиентов таковы, что, вероятно, у многих из них больше нет своих оригинальных DVD. Это означает, что установщик следующей версии (выполняющий серьезное обновление установщика Windows) завершится ошибкой, поскольку он не может сначала удалить предыдущую версию.
Итак, мой вопрос имеет два аспекта:
- Что мы сделали, чтобы создать эту проблему, чтобы избежать ее в будущих выпусках?
- Есть ли способ сообщить нашему следующему установщику Windows, чтобы он игнорировал эту ошибку и удалил предыдущую версию?
Наш текущий установщик (тот, который вызывает проблемы) был создан с использованием InstallAware. Мы, вероятно, переходим на WiX. Но решения на любой платформе (InstallAware, WiX, таблицы MSI) приветствуются!
ОБНОВЛЕНИЕ: у меня есть следующий ряд в обоих InstallExecuteSequence
а также InstallUISequence
таблицы в моем MSI, которые вполне могут быть релевантными, но я понятия не имею, что такое свойство SRCDIREX или где оно устанавливается.
| Action | Condition |
|---------------|--------------|
| ResolveSource | NOT SRCDIREX |
3 ответа
Вероятно, одно из действий (стандартное или пользовательское), которое ссылается на исходный MSI, не было обусловлено выполнением только при установке (например, ResolveSource должен быть обусловлен как "НЕ УСТАНОВЛЕНО"). Возможно, вы сможете обойти это с помощью патча (файла MSP), который изменяет условие соответствующего действия.
Я бы начал с определения того, какое действие вызывает ошибку. Вот как бы я это сделал:
- Установите приложение с DVD
- скопируйте файл msi в какую-нибудь локальную папку, скажем, "c:\temp"
- Удалить DVD
- начните удаление как это: "
msiexec /x yourapp.msi /L*v c:\temp\uninst.log
"
Когда появляется ошибка, удаление фактически приостанавливается. Затем вы можете проверить конец журнала, чтобы увидеть, где именно вы находитесь в последовательности. Это должно помочь вам отладить.
Если ответ действительно ResolveSource, регулярное исправление может быть не вариант. Хит Стюарт упоминает об этом в своем блоге - http://blogs.msdn.com/heaths/archive/2007/10/25/resolvesource-requires-source.aspx
"В общем случае не планируйте ResolveSource. Например, если он запускается при установке исправления, пользователю необходимо будет вставить исходный носитель независимо от того, понадобится он или нет".
Если вы находитесь в этой позиции, вы можете создать преобразование, которое обновит условие в вашем действии ResolveSource, и вручную применить его к кэшированной копии файла msi. Это немного больно, но я уверен, что это сработает.
Вы пытались скопировать эти файлы в папку%WinDir%/system32?
РЕДАКТИРОВАТЬ: Выполните настройку, чтобы скопировать весь установочный MSI-пакет на диск и установить его с дисковода. Удалите все файлы, ненужные для удаления. Adobe, HP и многие другие компании делают это.