我正在尝试检测并安装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执行命令?
答案 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)