я пытаюсь обнаружить и установить 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;
если я запускаю установку inno на своем компьютере разработчика, на котором установлен ReportViewer, он все равно выдает настройку ReportViewer, и он не устанавливается автоматически
Что я делаю не так?
Изменить
Я обнаружил, что параметром для установки silen является ReportViewer.exe /q:a /c:"install.exe /q"
, как мне добавить /q:a /c:"install.exe /q"
в команду выполнения оболочки?
/Q
. Таким образом, строка будет:ShellExec('', ExpandConstant('{tmp}\ReportViewer.exe'), '\Q',ExpandConstant('{tmp}'), SW_HIDE, ewWaitUntilTerminated, ErrorCode)
- person RobeN   schedule 04.06.2013ShellExec('', ExpandConstant('{tmp}\ReportViewer.exe'), '\Q',ExpandConstant('{tmp}'), SW_HIDE, ewWaitUntilTerminated, ErrorCode)
- person Smith   schedule 04.06.2013/Q
, а не\Q
:( - person RobeN   schedule 04.06.2013install.exe /q
- person RobeN   schedule 04.06.2013[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ReportViewer\v2.0.50727] "Install"=dword:00000001
- person Smith   schedule 04.06.2013HKEY_LOCAL_MACHINE
из пути к ключу. Запросить только ключ'SOFTWARE\Microsoft\ReportViewer\ + Version'
. Этот корневой ключHKEY_LOCAL_MACHINE
, который вы передаетеHKLM
в вызове функцииRegQueryDWordValue
. - person TLama   schedule 04.06.2013install.exe /q
выдала ошибку командной строки - person Smith   schedule 04.06.2013install.exe /q
, я успешно установил приложение с помощью этой команды, когда у меня были извлечены все (41) установочные файлы (вы не установите приложение, если будете извлекать только install.exe; у вас должен быть хотя бы один языковой файл, MSI, INI и CAB-файлы). - person RobeN   schedule 04.06.2013/Q
своей новой строкой/q:a /c:"install.exe /q"
, хотяewWaitUntilTerminated
в этом случае может работать некорректно - вы должны проверить это на своей стороне.ShellExec('', ExpandConstant('{tmp}\ReportViewer.exe'), '/q:a /c:"install.exe /q"', ExpandConstant('{tmp}'), SW_HIDE, ewWaitUntilTerminated, ErrorCode)
- person RobeN   schedule 04.06.2013Exec
лучше, чем использованиеShellExec
. Параметры немного отличаются, но они достаточно похожи, чтобы их можно было легко преобразовать. Просто прочитайте документацию в файле справки. - person Miral   schedule 05.06.2013