我使用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;
函数RegisterServer
似乎不起作用。它会抛出一个错误,表示RegSvr32 failed with exit code 0x4
。我在网上读了很多文章说.net dll应该用regasm注册。我真的不知道如何做到这一点,尤其是在Inno Setup中。
请帮帮我们。
答案 0 :(得分:10)
虽然已超过一年,但我最近遇到了同样的问题,并且能够使用以下脚本进行纠正。
[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 Setup Help
答案 1 :(得分:0)
要做到这一点,你必须......
1)确保安装.net 4.0(在大多数机器上默认不是)
2)提取并注册DLL(需要在提取的DLL上调用regasm.exe)
作为安装的第一步,“GetDiskDriveInformation”要做很多事情。
最好在Inno中本地获取信息或调用没有先决条件的本机DLL。