Установщик Windows вызывает .NET3.5 для выполнения сборки .NET 4

StackOverflow https://stackoverflow.com/questions/4035363

  •  26-09-2019
  •  | 
  •  

Вопрос

У меня есть приложение, которое я обновил с некоторыми узлами .NE4, включая пользовательские действия .dll, который работает, когда приложение будет удалено. Приложение было первоначально установлено с помощью .NET 3.5, и он требует некоторых пользовательских действий при установке и удалении.

Проблема в том, что теперь при удалении .dll из пользовательских действий изменился на ее версию .NET 4, и я получаю систему .badimageFormatexception: не удалось загрузить файл или сборку «x» или одну из его зависимостей. Эта сборка построена за счет времени выполнения, чем в данный момент загруженного текущего времени выполнения и не может быть загружена. Имя файла: 'x'

Кто-нибудь знает способ сказать деинсталлю, чтобы начать процесс с .NET 4 вместо звонка .NET 3.5, чтобы загрузить пользовательские действия DLL? Где эта информация об удалении хранится для каждого продукта? и как?

Это было полезно?

Решение 3

После долгих исследований я нашел способ решить вопрос. Я сделал версию приложения на .NET 4 и создал установщик. Установил его, а затем сравнил файл .msi Приложение сохраняет папку C: Windows Установщика с предыдущей версией одного и того же файла, но с .NET 3.5 (оригинальная установка). Затем откройте оба файлы ORCAS и изменили некоторые значения свойств и пару двоичных файлов в файле .NET 3.5 MSI из файла NEW .NET 4 MSI.
Теперь, когда я делаю обновление одной файлов в приложении к A.NET 4 версии IM (поэтому приложение работает под .NET 4) Мне также необходимо изменить этот файл Uninstall .msi, расположенный под C: Windows Установщик, а затем При удалении установщика Windows вызовет .NET 4, чтобы выполнить пользовательские действия вместо .NET 3.5, который был исходной сборкой, когда приложение было установлено.

Вот сценарий, который автоматизирует процесс и не нужно использовать ORCAS, просто пропустите файл MSI для изменения, а две необходимые DLL (которые извлекли из MSI версии .NET 4).

var installer=new ActiveXObject("WindowsInstaller.Installer");
var db;
var msiOpenDatabaseModeTransact = 1;
var msiFile = WScript.Arguments.Item(0);
var installbuildfile = WScript.Arguments.Item(1);
var auxDllFile = WScript.Arguments.Item(2);
database = installer.OpenDatabase(msiFile, msiOpenDatabaseModeTransact);

    var view = database.OpenView("SELECT Name,Data FROM Binary");
    view.Execute();
    var rec;
    for (rec = view.Fetch(); rec != null; rec = view.Fetch()) {
        WScript.echo("Current SmartUpdater.exe version is: "+rec.StringData(1)); 
        if (rec.StringData(1) == "InstallUtil") {
            rec.SetStream(2, installbuildfile);
            view.Modify(2, rec)
            WScript.echo("Changed: " + rec.StringData(1)); 
        }
        if (rec.StringData(1) == "MSVBDPCADLL") {
            rec.SetStream(2, auxDllFile);
            view.Modify(2, rec)
            WScript.echo("Changed: " + rec.StringData(1)); 
        }
    }
    view.Close();
    view = database.OpenView("UPDATE Property SET Value='v4.0' WHERE Property='VSDFrameworkVersion'");
    view.Execute();
    view.Close();

database.Commit();

Файл installutil dll можно найти в каталоге .NET под C: Windows для версии 4.0, второй с именем msvbdpcadll по-прежнему все еще является ошибкой для меня, но я мог извлечь его из MSI сгенерированного .NET 4 (там Может быть различия для 32 и 64 версий, вероятно, вам нужно будет извлечь разные версии DLL)

Другие советы

Здравствуйте, чтобы нацелиться на определенную версию .NET Framework для исполняемого имени App.exe, вы можете поставить эти строки:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0.30319"/>
  </startup>
</configuration>

в файл с именем app.exe.config близко к исполняемому. Если файл уже существует, просто объединяйте два XMLS (редактируйте: я положу «v4.0.30319», потому что это версия, которую у меня на компьютере, но вы должны поставить тот, который у вас есть, посмотрите на% Windir% Microsoft. Net Framework или% Windir% Microsoft.net frame64, чтобы получить его).

Может быть, вы не знаете имя исполняемого файла, который удаляет ваше программное обеспечение. В этом случае вы можете попытаться использовать Explorer Process Explorer, чтобы найти его (http://www.windowsitpro.com/article/utilities/find-the-source-of-an-error-message.aspx).

Но будьте осторожны: делать это изменит цель .NET FX Цель всех прогонов с тем же процессом, поэтому (может быть,) Изменение поведения всех удален, сделанных этим удалением!

Какая версия Windows Installer вы используете? Я не могу сказать наверняка, но мне интересно, используете ли вы старая версия установщика, которая хочет использовать 3,5 рамки.

Чтобы проверить, посмотрите на свойства для проекта установки. Нажмите «Предварительные условия» и прокрутите до нижней части диалога. Проверьте версию, которую вы хотите использовать для процесса установки.

Честно говоря, я никогда не имел / не заметил эту проблему, но мне интересно, будет ли использовать более новую установщик Windows.

Hello, SO!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top