Изменение версии.NET Framework класса Installer, используемого в InstallShield
У меня есть C# .NET Installer Class DLL, используемая InstallShield 2011 для выполнения некоторого пользовательского кода в конце процесса установки. Класс.NET Installer в настоящее время ориентирован на.NET Framework 3.5.
При изменении класса установщика.NET на целевой.NET Framework 4.0 и копировании новой библиотеки DLL в проект InstallShield я получаю сообщение об ошибке 1001, когда для запуска используется пользовательский код установщика.
На тестовом компьютере установлена последняя версия.NET Framework.
Что-то нужно изменить в InstallShield, чтобы указать целевую версию класса.NET Installer?
2 ответа
В InstallShield расположение файла.NET Framework не указывало на.NET 4.
Это расположение файла указывается в InstallShield - Сервис - Параметры - .NET - .NET Framework Расположение файлов.
Установщик Windows повторно использует изолированные песочницы для пользовательских действий. Если одно настраиваемое действие запускает CLR 2.0, а другое настраиваемое действие пытается запустить CLR 4.0, вы получите исключение BadImageFormatException. Это один из множества недостатков пользовательских действий InstallUtil (класс Installer).
Вместо этого изучите пользовательские действия установщика Windows XML (WiX) Deployment Tools Foundation (DTF). Они инкапсулируются как собственные пользовательские действия Win32 DLL и совместимы с InstallShield. В изолированной программной среде выполняется только собственный код, а все управляемые настраиваемые действия выполняются вне процесса, а собственный код выступает в качестве прокси-сервера для API MSI. (То, что пользовательское действие InstallUtil не может даже поверить или нет.)
Управляемые пользовательские действия (DTF) Deployment Tools Foundation (DTF)