使用inno设置静默检测并安装reportviewer

时间:2013-06-04 13:09:52

标签: .net winforms reportviewer inno-setup silent-installer

我正在尝试检测并安装reportviewer 2005用于静态开发的.net 2.0应用程序 我已经下载了reportviewer 2005可再发行安装程序,我有这个脚本

检查是否已安装reportviewer的代码

/////////////////////////////////////////////////
// check if report viewer is installed
////////////////////////////////////////////////
function IsReportViewerInstalled(version: string): boolean;
//    'v2.0.50727'          .NET Framework 2.0

var
    key: string;
    install: cardinal;
    success: boolean;
       ErrorCode: Integer;
begin

    // installation all report viewer
    key := 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ReportViewer\' + version;

    success := RegQueryDWordValue(HKLM, key, 'Install', install);

    result := success and (install = 1);
end;

检测和安装

的代码
if not IsReportViewerInstalled('v2.0.50727') then  begin
        ExtractTemporaryFile('ReportViewer.exe');
        Log(ExpandConstant('{tmp}\ReportViewer.exe'));
        if ShellExec('', ExpandConstant('{tmp}\ReportViewer.exe'), '','', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode) then  begin
              Result := True;
           end  else begin
    MsgBox('ReportViewer installation failed. '+SysErrorMessage(ErrorCode), mbError, MB_OK);
              Result := false;
        end;
end else  begin
    result := true;
end;

如果我在安装了reportviewer的dev机器上运行inno设置,它仍会弹出reportviewer设置,并且不会静默安装

我做错了什么?

修改

我认为安装silen的参数是ReportViewer.exe /q:a /c:"install.exe /q" 我如何将/q:a /c:"install.exe /q" poass到shell执行命令?

1 个答案:

答案 0 :(得分:2)

你应该看两件事:

第1页(感谢TLama发现了这个问题)

Key字符串 - 字符串HKEY_LOCAL_MACHINE\中存在冗余Value

您在HKLM

中致电RegQueryDWordValue(HKLM, key, 'Install', install);分行

正确的Key应为:

key := 'SOFTWARE\Microsoft\ReportViewer\' + version;


第二

如果您知道命令行的参数,则可以调用ReportViewer的静默安装。

如您所知,您使用/q:a /c:"install.exe /q",只需将其添加到ShellExec函数中:

ShellExec('', ExpandConstant('{tmp}\ReportViewer.exe'), '/q:a /c:"install.exe /q"', ExpandConstant('{tmp}'), SW_HIDE, ewWaitUntilTerminated, ErrorCode)