2011-04-11 31 views
7

He escrito una biblioteca de clase usando Visual Studio 2010 C# para leer información de hardware de una computadora (por ejemplo, HDD/SSD). Usaré este dll para crear un instalador usando InnoSetup para leer la información de hardware de la computadora de destino. Ahora mi problema es que .NET dll no se puede usar directamente a menos que ya esté registrado. Estoy tratando de encontrar una manera de registrar el dll durante InitializeSetup en InnoSetup para que pueda usar las funciones en el dll. Aquí está el script que escribí para el instalador.Cómo registrar una .NET DLL usando Inno Setup

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; 

La función RegisterServer no parece work.It genera un error que dice RegSvr32 failed with exit code 0x4. Leí muchos artículos en la red que dicen que .net dll debería registrarse usando regasm. Realmente no sé cómo hacer esto, especialmente en Inno Setup.

Por favor, ayuda chicos.

Respuesta

0

Para hacer esto, usted debe ..

1) asegurarse de que .NET 4.0 está instalado (no por defecto en la mayoría de las máquinas todavía)

2) extraer y registrar la DLL (es necesario llame a regasm.exe en la DLL extraída)

Esto es mucho para hacer solo para "GetDiskDriveInformation" como el primer paso de la instalación.

Es mucho mejor obtener la información de forma nativa en Inno o llamar a una DLL nativa que no tenga los requisitos previos.

9

Aunque fue hace más de un año, recientemente tuve el mismo problema y pude rectificar utilizando el siguiente script.

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

Si el archivo ha ser registrada en el paso de inicialización, podemos utilizar una de las funciones de apoyo de la Inno Setup.

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

Más información se puede encontrar en: Inno Setup Help

+1

Tenga en cuenta que esto ocurre durante la instalación y, como tal, es demasiado tarde para que la DLL que se utilizará durante 'InitialiseSetup'. De lo contrario, es una solución válida para usar el DLL luego. – Deanna

+0

¿Qué sucede si estás trabajando en Framework 3.5? No hay constantes para eso ... – Nyerguds

+1

@Nyerguds Lo que supongo es que si estás trabajando en 3.5 deberías tener 2.0 también instalado con todos los ejecutables del núcleo. Espero que también sea parte del sistema operativo. –

Cuestiones relacionadas