如何使用Inno Setup注册.NET DLL

pat*_*ero 9 inno-setup

我使用Visual Studio 2010 C#编写了一个类库来读取计算机的硬件信息(例如HDD/SSD).我将使用此dll创建一个使用InnoSetup的安装程序来读取目标计算机的硬件信息.现在我的问题是.NET dll不能直接使用,除非它已经注册.我试图在InnoSetup的InitializeSetup中找到一种注册dll的方法,这样我就可以使用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;
Run Code Online (Sandbox Code Playgroud)

该功能RegisterServer似乎不起作用RegSvr32 failed with exit code 0x4.它会抛出一个错误.我在网上读了很多文章说.net dll应该用regasm注册.我真的不知道如何做到这一点,尤其是在Inno Setup中.

请帮帮我们

Ven*_*mar 10

虽然已经超过一年,但我最近遇到了同样的问题,并且能够使用下面的脚本进行纠正.

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

如果文件已在初始化步骤中注册,我们可以使用Inno setup的支持功能之一.

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

更多信息可以在: Inno Setup帮助中找到

  • 请注意,对于语言兼容性,您可以使用原始状态消息来注册dll文件,方法是使用`{code:StrStatusRegisterFiles}`作为`StatusMsg`,然后使该函数从[Messages]中获取原始语言相关的安装程序字符串.使用`result:= SetupMessage(MsgStatusRegisterFiles);` (2认同)

Dea*_*nna 0

要做到这一点,你必须..

1)确保安装了.net 4.0(大多数机器上尚未默认安装)

2)提取并注册DLL(需要对提取的DLL调用regasm.exe)

仅将“GetDiskDriveInformation”作为安装的第一步就需要做很多工作。

最好在 Inno 中本地获取信息或调用不具备先决条件的本地 DLL。