2013-06-04 42 views
1

我試圖檢測和安裝的ReportViewer 2005的.NET 2.0的應用程序我默默發展 我已經下載的ReportViewer 2005年再分發安裝,我有這個腳本檢測並Inno Setup的靜默安裝reportviwer

檢查代碼如果的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的開發機器中,它仍然彈出reportviewer設置,它不會默默安裝

我在做什麼錯?

編輯

我發現用參數安裝過沉默是ReportViewer.exe /q:a /c:"install.exe /q" 我如何poass的/q:a /c:"install.exe /q"到shell執行命令?

+1

我沒有看到參數在ReportViewer.exe提示模式進行安裝。您應該添加特定的參數(例如/ q或/ silent - 您應該檢查哪個是適用於此應用的正確參數)。編輯:我已檢查:您的缺失參數是'/ Q'。因此,該行將是:'ShellExec('',ExpandConstant('{tmp} \ ReportViewer.exe'),'\ Q',ExpandConstant('{tmp}'),SW_HIDE,ewWaitUntilTerminated,ErrorCode)' – RobeN

+0

我得到命令行錯誤,當我執行你的代碼'ShellExec('',ExpandConstant('{tmp} \ ReportViewer.exe'),'\ Q',ExpandConstant('{tmp}'),SW_HIDE,ewWaitUntilTerminated,ErrorCode)' – Smith

+0

對不起對於錯字:應該是'/ Q',而不是'\ Q' :( – RobeN

回答

2

有2件事情,你應該看看:

1日(感謝TLama是看準了這一問題)

Key串 - 存在串Value冗餘HKEY_LOCAL_MACHINE\

你打電話HKLM分公司RegQueryDWordValue(HKLM, key, 'Install', install);

正確Key應該是:

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


第二

可以調用靜默安裝的ReportViewer的,如果你知道參數命令行。

如你所知,你shold使用/q:a /c:"install.exe /q",你只需簡單地將其添加在ShellExec功能:

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

+0

感謝您的幫助 – Smith