C#应用程序和组装地狱!
我在家用电脑上用Windows7、VS2008和.NETFramework2.0创建了一个C#项目。我的应用程序正在使用“Irkang”声音库。使用InnoSetup 5,我已经为我的应用程序创建了安装程序。安装程序包括了所有需要的文件,它安装得很好,但当我在其他计算机上安装我的应用程序时,我遇到了一些令人困惑的错误。第一个看起来像这样: 当我创建标记为“irklang.dll”和“regserver”(将在安装过程中注册)的安装脚本时,我在安装程序时遇到了以下错误:“无法注册dll/OCX:RegSrv32失败,退出代码为0x4”。消息得到了标准的“中止、忽略、重试”按钮,但和往常一样,“重试”不会修复它 我该怎么办?如何修复这个甚至不会困扰普通程序员的错误 这是我的Inno安装安装文件:C#应用程序和组装地狱!,c#,dll,installation,C#,Dll,Installation,我在家用电脑上用Windows7、VS2008和.NETFramework2.0创建了一个C#项目。我的应用程序正在使用“Irkang”声音库。使用InnoSetup 5,我已经为我的应用程序创建了安装程序。安装程序包括了所有需要的文件,它安装得很好,但当我在其他计算机上安装我的应用程序时,我遇到了一些令人困惑的错误。第一个看起来像这样: 当我创建标记为“irklang.dll”和“regserver”(将在安装过程中注册)的安装脚本时,我在安装程序时遇到了以下错误:“无法注册dll/OCX:
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
[CustomMessages]
dotnetmissing=This setup requires the .NET Framework v2.0. Please download and install the .NET Framework v.2 and run this setup again. Do you want to download the framework now?
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{10087152-8A1D-4C0B-9BFC-E463C2F8E3C0}
AppName=Kucni rad
AppVersion=1.5
;AppVerName=Kucni rad 1.5
DefaultDirName={pf}\Kucni rad
DefaultGroupName=Kucni rad
OutputDir=C:\Users\Boza\Desktop
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Code]
function InitializeSetup(): Boolean;
var
ErrorCode: Integer;
NetFrameWorkInstalled : Boolean;
Result1 : Boolean;
begin
NetFrameWorkInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\.NETFramework\policy\v2.0');
if NetFrameWorkInstalled =true then
begin
Result := true;
end;
if NetFrameWorkInstalled = false then
begin
NetFrameWorkInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\.NETFramework\policy\v2.0');
if NetFrameWorkInstalled =true then
begin
Result := true;
end;
if NetFrameWorkInstalled =false then
begin
//Result1 := (ExpandConstant('{cm:dotnetmissing}'), mbConfirmation, MB_YESNO) = idYes;
Result1 := MsgBox(ExpandConstant('{cm:dotnetmissing}'),
mbConfirmation, MB_YESNO) = idYes;
if Result1 =false then
begin
Result:=false;
end
else
begin
Result:=false;
ShellExec('open',
'http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe',
'','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
end;
end;
end;
end;
[Dirs]
Name: "{app}\Sounds"
[Files]
Source: "C:\Users\Boza\Desktop\Novi kucnirad\kucnirad\bin\Debug\kucnirad.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\Boza\Desktop\Novi kucnirad\kucnirad\bin\Debug\Sounds\*"; DestDir: "{app}\Sounds"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\Users\Boza\Desktop\Novi kucnirad\kucnirad\bin\Debug\ikpMP3.dll"; DestDir: "{app}"; Flags: ignoreversion regserver
Source: "C:\Users\Boza\Desktop\Novi kucnirad\kucnirad\bin\Debug\irrKlang.NET2.0.dll"; DestDir: "{app}"; Flags: ignoreversion regserver
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{group}\Kucni rad"; Filename: "{app}\kucnirad.exe"
Name: "{group}\{cm:UninstallProgram,Kucni rad}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\Kucni rad"; Filename: "{app}\kucnirad.exe"; Tasks: desktopicon
[Run]
Filename: "{app}\kucnirad.exe"; Description: "{cm:LaunchProgram,Kucni rad}"; Flags: nowait postinstall skipifsilent
编辑:
我得到了它!这不是我的应用程序的问题,而是下载的DLL本身的问题!似乎是IrrKlang.dll版本1.3(我使用的最新版本)导致了这些问题!1.1版运行得很好 RegSrv32用于COM dll,从外观上看,irklang.dll是一个.NET dll
如果.NET DLL需要用于COM,则可以使用RegAsm.exe注册它们。我假设这是在Windows Vista或7上?将用户必须是管理员的要求添加到InnoSetup文件中
即,在脚本的[Setup]部分添加“PrivilegesRequired=admin” 错误消息确实表明它无法加载IrrKlang.NET2.0或其依赖项之一,因此您可能会发现它需要其他DLL才能工作,而这些DLL恰好是您的机器上的一个DLL 最好回到你得到这个dll的地方,它应该有文档记录 更新
显然,它需要MSVCR80.DLL和MSVCM80.DLL,我在谷歌搜索时发现了。看起来,根据您使用的库的版本,可能存在.NET2.0的已知问题。他们建议将此添加到app.config:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
Regsvr32在安装程序运行时需要管理员权限。你能得到该对象的.net版本吗?你可以从fusion日志中获得更多信息。如果异常详细信息不包括fusion日志信息,您可以通过其他方式获得它,如此处所述:如果您试图在32位计算机上安装64位DLL,或者通过其他方式(使用64位工具的32位DLL),也可能会发生这种情况。它在Windows 7上工作,因为它是创建、构建和,在Win7上编译。它在WinXP上不起作用@Nemo在您的计算机上运行的另一个原因是,DLL已经在您的计算机上注册了。@Nemo如我所说,将“PrivilegesRequired=admin”放入脚本的[Setup]部分。@Nemo同样,我不会到处乱扔ignoreversion
(即使您没有在系统范围内更改任何内容)。这可能会使升级变得困难。不,“PrivilegesRequired=admin”不会改变任何东西!:\仍然无法在WinXp上工作!注册dll时出错(在我的问题中提到)仍然存在!RegSrv32-错误0x4!请再来一次?!:)真的,我不知道如何注册dll-s,大多数情况下,当安装程序完成它的工作时,一切都正常了…我知道!我已经安装了“vcredist_x86”,我的测试计算机上也安装了VS2008-不走运\您可以尝试从系统内部下载并运行Process Monitor。这将显示应用程序试图加载的任何文件,并且可能指向其他需求。