Приложение C # и сборка ад! - PullRequest
       24

Приложение C # и сборка ад!

3 голосов
/ 13 апреля 2011

Я создал проект C # на своем домашнем компьютере с Windows 7, VS 2008 и с использованием .net framework 2.0.Мое приложение использует звуковую библиотеку "Irklang".Используя InnoSetup 5, я создал настройки для своего приложения.Программа установки включает в себя все необходимые файлы, она хорошо их устанавливает, но когда я устанавливаю свое приложение на какой-то другой компьютер, у меня возникают некоторые запутанные ошибки.Первый выглядит следующим образом:

enter image description here

Когда я создаю сценарий установки с меткой "irklang.dll" с "regserver" (для регистрации во время установки), я получил эту ошибку во время установкимоей программы: «Невозможно зарегистрировать DLL / OCX: сбой RegSrv32 с кодом выхода 0x4».Сообщение получило стандартные кнопки «Abort, Ignore, Retry», но, как всегда, «Retry» не исправит это.

Что мне делать?Как исправить эту ошибку, которая не должна беспокоить даже среднего программиста?

Это мой установочный файл установки Inno:

; 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 работает просто отлично!

Ответы [ 4 ]

0 голосов
/ 13 апреля 2011

Я просматривал Google и наткнулся на это сообщение на форуме . Кажется, что в зависимости от того, какую версию библиотеки вы используете, может быть известная проблема с .NET 2.0. Они предложили добавить это в ваш app.config:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup> 
0 голосов
/ 13 апреля 2011

Я предполагаю, что это на Windows Vista или 7?Добавьте в свой файл InnoSetup требование, чтобы пользователь был администратором.

А именно, добавьте "PrivilegesRequired = admin" в разделе скрипта [Setup].

0 голосов
/ 13 апреля 2011

В сообщении об ошибке говорится, что он не может загрузить IrrKlang.NET2.0 или одну из его зависимостей , так что вы, вероятно, обнаружите, что ему нужны другие dll для работы, которые оказываются на вашей машине.

Лучше всего вернуться туда, где вы получили эту DLL, которая должна иметь это документально.

Обновление.

Очевидно, что для этого нужны MSVCR80.DLL и MSVCM80.DLL смотри здесь

0 голосов
/ 13 апреля 2011

RegSrv32 предназначен для COM DLL, и, судя по всему, irklang.dll является DLL-библиотекой .NET.

.NET DLL могут быть зарегистрированы с помощью RegAsm.exe, если они должны быть доступны для COM.

...