Как зарегистрировать .NET DLL с помощью Inno Setup

#inno-setup

#inno-setup

Вопрос:

Я написал библиотеку классов с использованием Visual Studio 2010 C # для чтения информации об оборудовании компьютера (например, HDD / SSD). Я буду использовать эту dll для создания установщика с помощью InnoSetup для чтения информации об оборудовании целевого компьютера. Теперь мои проблемы в том, что .NET dll нельзя использовать напрямую, если она уже не зарегистрирована. Я пытаюсь найти способ зарегистрировать dll во время InitializeSetup в InnoSetup, чтобы я мог использовать функции в dll. Вот сценарий, который я написал для установщика.

 function InitializeSetup(): Boolean;
var
    obj: Variant;
    diskPartitions: Integer;
    va: String;
    ErrorCode: Integer;
    b: Boolean;
begin
    ExtractTemporaryFile('SSHardwareChecker.dll');
    RegisterServer(False, ExpandConstant('{tmp}SSHardwareChecker.dll'), False);
    obj := CreateOleObject('SSHardwareChecker.SSClass');
    va := obj.GetDiskDriveInformation;
    MsgBox(va, mbInformation, mb_Ok);
    b:=UnregisterServer(False, ExpandConstant('{tmp}SSHardwareChecker.dll'), False);
end;
  

Функция RegisterServer , похоже, не работает.Выдает ошибку, которая гласит RegSvr32 failed with exit code 0x4 . Я прочитал много статей в сети, в которых говорится, что .net dll должна быть зарегистрирована с помощью regasm. Я действительно не знаю, как это сделать, особенно в Inno Setup.

Пожалуйста, помогите, ребята.

Ответ №1:

Хотя прошло больше года, недавно у меня возникла та же проблема, и я смог исправить ее с помощью приведенного ниже скрипта.

 [Run]
Filename: "{dotnet20}RegAsm.exe"; Parameters: /codebase YourDLL.dll; WorkingDir: {app}; StatusMsg: "Registering Controls..."; Flags: runminimized
  

Если файл был зарегистрирован на этапе инициализации, мы можем использовать одну из функций поддержки Inno setup.

function Exec(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean;

Более подробную информацию можно найти в: Справка по установке Inno

Комментарии:

1. Обратите внимание, что это происходит во ВРЕМЯ установки и, как таковой, слишком поздно для использования DLL во время InitialiseSetup . В противном случае, это допустимое решение для последующего использования DLL.

2. @Nyerguds Я предполагаю, что, хотя, если вы работаете в 3.5, у вас также должен быть установлен 2.0 со всеми основными исполняемыми файлами внутри него. Я надеюсь, что это также часть операционной системы.

3. @Venkatesh Kumar Я просмотрел это, и кажется, что 3.5 считается «обновлением» 2.0 и, как таковое, по-прежнему использует папку приложений 2.0. Итак, {dotnet20} отлично работает для версии 3.5. В любом случае, большое спасибо, этот код действительно мне помог 🙂

4. Обратите внимание, что для языковой совместимости вы можете использовать исходное сообщение о состоянии для регистрации DLL-файлов, используя что-то вроде {code:StrStatusRegisterFiles} as StatusMsg , а затем заставить эту функцию извлекать исходную строку установщика, зависящую от языка, из [Сообщений] с помощью result := SetupMessage(MsgStatusRegisterFiles);

Ответ №2:

Для этого НЕОБХОДИМО..

1) убедитесь, что установлен .net 4.0 (пока не по умолчанию на большинстве компьютеров)

2) извлеките и зарегистрируйте DLL (вам нужно вызвать regasm.exe в извлеченной DLL)

Это многое нужно сделать, чтобы просто «GetDiskDriveInformation» в качестве самого первого шага установки.

Гораздо лучше получить информацию изначально в Inno или вызвать собственную DLL, для которой нет необходимых условий.