2017-09-27 2 views
0

Visual Studio 2013의 응용 프로그램에 설치 배포 프로젝트를 추가하여 응용 프로그램의 설치 마법사를 생성하고 Setup.msi - 자동 제공을위한 파일 설치.시작 조건은 자동 설치 (응용 프로그램 + .Net Framework)를 방지합니다.

msiexec /i "<PathToSetupDirectory>\Setup.msi" /qb!이 예상대로 작동합니다. 내 앱이 자동으로 설치됩니다. 하지만 C# -Application은 .NET Framework 4.5.1에 ​​달려 있습니다. 이 설치되어 있지 않으면 시작 조건이 발생합니다.

이 설치에는 .NET Framework 버전 VersionNumber가 필요합니다. .NET Framework를 설치하고이 설치를 다시 실행하십시오. .NET Framework는 웹에서 얻을 수 있습니다. 지금하고 싶니?

물론 나는 이것을하고 싶지 않습니다. 이것은 자동으로 작동합니다.

그래서 나는 Setup Deployment Project (right click) => Properties => Prerequisites...에 프레임 워크를 선택 "내 응용 프로그램과 같은 위치에서 다운로드 전제 조건" 을 확인하고 디렉토리 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\Bootstrapper\Packages\DotNetFX451NDP451-KB2858728-x86-x64-AllOS-ENU.exe을 추가했다.

내 생각에 프레임 워크가 아직 설치되지 않은 경우 Setup.msi에 시작 조건 메시지가 표시되지 않습니다. 사용자가 개입하지 않고 .Net Framework과 응용 프로그램을 설치해야합니다. 하지만 여전히 나타납니다. No을 누르면 설치가 종료됩니다. 을 누르면 브라우저가 열리고 설치가 종료됩니다.

물론 필자는 .Net Framework을 자동으로 설치하고 내 응용 프로그램의 자동 설치를 시작하는 bash 스크립트를 작성할 수 있습니다. 그러나 나는 이것을 "올바른 방법" 달성하고 싶습니다. 나는 내가 놓친 느낌이있다 뭔가.

아이디어가 있으십니까?

+0

. 여기에서 잘 작동하는 모든 것들 (사용자 상호 작용 포함) : * .Net 설치 => PC 재시동 => App-Installation *. 그래서 Visual Studio에서 내 구성이 올바른 것 같습니다. 하지만 실제로 msi 파일을 사용하여 자동 설치를 수행하기위한 bash 스크립트를 작성해야합니까? – rweisse

답변

0

이 주제를 명확히하기위한 PhilDW의 Thx. 이것이 msi 파일로는 불가능하다는 것을 알고 있습니다. 나는 WiX 부트 스트 래퍼 툴인 "Burn"과 부트 스트랩 매니페스트 제네레이터 (Bootstrap Manifest Generator)에 대해 읽었으며 간단한 배치 파일을 작성하는 결론에 도달했습니다. .NET Framework 버전 4.5가 있으면이를 감지합니다.1 이상이 설치되어 있지 않으면 자동으로 설치됩니다. 그 후에 자동 설치가 시작됩니다.

silent_install.cmd :

@echo off 
set forceNetFrameworkInstall=true 

echo Starting silent installation of Setup.msi and its prerequisites ... 

REG QUERY "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" /v Release 
if %ERRORLEVEL% EQU 0 (goto CHECK) else (goto INSTALL_DOTNET) 

:CHECK 
for /f "tokens=2*" %%a in ('REG QUERY "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" /v Release') do set "releaseKeyHex=%%b" 
set /A releaseKeyDec=%releaseKeyHex% 
if %releaseKeyDec% GEQ 378675 set forceNetFrameworkInstall=false 
if %forceNetFrameworkInstall% == true (
    echo Prerequisite: .Net Framework 4.5.1 or later version not detected 
    goto INSTALL_DOTNET 
) else (
    echo .Net Framework 4.5.1 or later version detected 
    goto INSTALL_APP 
) 

:INSTALL_DOTNET 
echo Installing .Net Framework 4.5.1 ... 
%~dp0\DotNetFX451\NDP451-KB2858728-x86-x64-AllOS-ENU.exe /passive /norestart 
echo Installing .Net Framework 4.5.1 Language Pack (German) ... 
%~dp0\DotNetFX451\NDP451-KB2858728-x86-x64-AllOS-DEU.exe /passive /norestart 
goto INSTALL_APP 

:INSTALL_APP 
echo Installing Application ... 
msiexec /i %~dp0\Setup.msi /qb! 
exit 

이 스크립트는 현재 설치된 닷넷 프레임 워크 (4.x 버전)의 진수 해제 키를 읽고 진수이 키를 구문 분석하고 최소한의 자료와 비교 -key 숫자가 선호하는 .Net Framework입니다. 여기에서 가능한 값 목록을 찾을 수 있습니다 : Detecting the .NET Framework (값이 클수록 .Net Framework 버전이 높아짐).

스크립트는 다음 디렉토리 트리에 위치해야합니다 : 나는 그래픽 설정 인터페이스 (setup.exe를) 시도

|- setup.exe 
|- Setup.msi 
|- silent_install.cmd 
|+ DotNetFX451 
    |- NDP451-KB2858728-x86-x64-AllOS-DEU.exe 
    |- NDP451-KB2858728-x86-x64-AllOS-ENU.exe 
1

MSI 설치 프로그램은 .NET Framework도 설치할 수 없습니다. 주로 MSI 설치 프로그램이 다른 MSI 설치 (NET FW)를 재귀 적으로 설치할 수 없기 때문입니다. 이것이 VS 설치 프로그램에서 setup.exe를 사용하는 MSI 파일보다 먼저 설치해야하는 많은 필수 구성 요소가있는 이유 중 하나입니다.

setup.exe 부트 스트 래퍼에는 내가 아는 한 자동 옵션이 ​​없지만 많은 필수 구성 요소에는 자동 설치가 없기 때문에 그 것입니다.

https://msdn.microsoft.com/en-us/library/ms165429.aspx

은 그래서 여전히 옵션이 될 수 있습니다 전제 조건이 그들을 침묵하게하는 명령 줄이 포함 된 포함 된 파일을 변경하는 데 사용할 수있는 (부트 스트랩 매니페스트 생성기)를 설치하는 도구로이 사용된다.

또 다른 선택은 WiX 부트 스트 래퍼 도구 "굽기"를 사용하여 프레임 워크를 설치하고 MSI를 자동으로 설치할 번들을 만드는 것입니다. 이것은 기본적으로 의존성과 MSI 파일에 대한 XML 기반 사양입니다.

+0

고마워요! 나는 내일 그것을 시도 할 것이고 당신을 최신으로 유지할 것이다! – rweisse

관련 문제