Windows Installer 배포 문제 해결

업데이트: 2007년 11월

이 단원의 항목에서는 배포 프로젝트를 만들고 응용 프로그램을 배포할 때 발생할 수 있는 다양한 문제점에 대해 다룹니다.

로캘이 영어가 아닌 컴퓨터에 설치할 때 MFC 응용 프로그램이 지역화되지 않는 경우

Visual Studio 배포 프로젝트를 사용하여 MFC 응용 프로그램을 배포할 때, 지역화된 병합 모듈인 Mfc_loc_e.msm 및 Mfc_loc_fe.msm의 종속성은 감지되지 않습니다. 병합 모듈은 Visual C++에 포함되어 있으며, 기본 설치 위치는 \Program File\Common\Merge Modules입니다. 지역화된 MFC 응용 프로그램을 배포하기 위해서는 두 병합 모듈을 배포 프로젝트에 수동으로 추가해야 합니다. 자세한 내용은 배포 및 종속성을 참조하십시오.

어셈블리 종속성이 감지되지 않는 경우

프로젝트 출력 그룹, 어셈블리 또는 병합 모듈이 배포 프로젝트에 추가될 때 종속 어셈블리는 자동으로 감지되어 프로젝트에 추가됩니다. 코드를 사용하여 런타임에 종속 어셈블리를 로드한 경우에는 배포 도구로 검색할 수 없습니다. 가능하면 코드에서 어셈블리를 로드하는 것을 피하거나 종속 어셈블리를 배포 프로젝트에 수동으로 추가해야 합니다. 자세한 내용은 배포 및 종속성을 참조하십시오.

설치 후 웹 서버에서 파일을 찾을 수 없는 경우

웹 설치 프로젝트를 웹 서버에 설치할 경우, 웹 응용 프로그램 폴더 및 웹 사용자 지정 폴더의 VirtualDirectory 속성은 해당 폴더에 포함된 파일이 웹 루트를 기준으로 어느 위치에 설치될지를 결정합니다. 이 속성이 공백으로 되어 있으면 파일이 웹 루트 폴더(inetpub\wwwroot)에 설치됩니다. 자세한 내용은 VirtualDirectory 속성을 참조하십시오.

웹 응용 프로그램을 웹 서버 루트 디렉터리에 설치하는 방법

기본적으로 웹 설치 배포 프로젝트를 사용하여 웹 응용 프로그램을 설치할 때는 파일이 웹 루트 폴더 바로 아래에 있고 배포 프로젝트와 이름이 같은 폴더에 설치됩니다. 웹 응용 프로그램 폴더의 VirtualDirectory 속성은 파일의 설치 위치를 결정합니다. 웹 루트 디렉터리에 설치하려면 VirtualDirectory 속성을 null(기본값 삭제)로 변경합니다. 자세한 내용은 VirtualDirectory 속성을 참조하십시오.

Xcopy 명령을 사용하여 배포한 웹 응용 프로그램을 디버깅할 수 없는 경우

Xcopy 명령을 사용하여 웹 응용 프로그램을 웹 서버에 복사한 경우에는 응용 프로그램에 IIS(인터넷 정보 서비스)가 자동으로 구성되지 않습니다. 응용 프로그램 폴더가 응용 프로그램 루트로 인식되지 않기 때문에 디버깅을 수행할 수 없습니다.

복사한 후에 IIS 관리자를 사용하여 새 폴더를 응용 프로그램 루트로 설정해야 합니다. 또한 응용 프로그램의 Bin 폴더에 대한 권한을 설정하여 DLL을 다운로드하지 못하도록 해야 합니다.

팁:

Xcopy 명령 대신 프로젝트 복사 명령 또는 웹 설치 배포 프로젝트를 사용해 보는 것도 고려하십시오. 자세한 내용은 대체 배포 방법을 참조하십시오.

종속성 분석을 해제하는 방법

종속성 분석 검색 및 확인을 해제하는 직접적인 방법은 없지만 SearchPath 속성을 클릭하면 나타나는 대화 상자에서 표준 검색 경로 포함 옵션의 선택을 취소하는 방법을 사용할 수는 있습니다.

다음과 같은 몇 가지 사항을 추가로 고려할 수도 있습니다.

  • 프로젝트 메뉴에서 추가를 선택하고 파일을 선택하여 파일 추가 명령으로 파일을 추가해야 합니다. 프로젝트 메뉴에서 추가를 선택하고 프로젝트 출력을 선택하여 프로젝트 출력 추가를 사용하는 경우 코드 프로젝트에서 보고되는 종속성이 포함됩니다.

  • 빌드할 때 종속성을 찾을 수 없습니다. 경고가 한 번 이상 나타날 수 있으나 이 경우에는 무시해도 됩니다.

  • 일부 파일에 대해서만 종속성 분석을 해제하려는 경우 표준 검색 경로를 해제한 상태로 병합 모듈 프로젝트에 해당 파일을 넣습니다. 그런 다음 병합 모듈 추가(프로젝트 메뉴에서 추가를 선택하고 병합 모듈 추가 선택)를 사용하여 표준 검색 경로를 설정한 상태로 일반 설치 프로젝트에 .msm을 포함시킵니다.

사용자가 수정하거나 삭제해야 하는 파일에 대한 복구를 해제하는 방법

Visual Studio에서는 프로그램이 시작될 때 해당 파일이 모두 있는지 확인하도록 보급 바로 가기를 만듭니다. 이 동작을 변경하여 파일이 복구되지 않도록 하려면 설치 프로젝트에서 해당 파일을 선택한 다음 Condition 속성을 NOT REINSTALL로 변경하여 복구할 때 해당 파일이 다시 설치되지 않도록 하고 Transitive 속성을 TRUE로 변경하여 해당 조건이 다시 확인되도록 합니다. 이렇게 하면 처음으로 파일이 삭제된 후에 설치 관리자가 화면에 잠시 나타나고 해당 파일을 다시 설치하지 않아도 되는지 확인합니다. 이후부터 설치 관리자는 나타나지 않습니다.

사용자 지정 작업/설치 관리자 클래스를 디버깅하는 방법

다음 방법 중 하나를 사용할 수 있습니다.

  • 코드의 호출을 System.Diagnostics.Debugger.Launch에 추가합니다. 이 방법을 사용하면 Just-In-Time 디버깅을 열고 코드에 새 디버거를 연결할 수 있습니다.

  • 코드의 호출을 MessageBox.Show("Debug Me")에 추가합니다. 메시지 상자가 표시되면 Visual Studio를 사용하여 MessageBox 프로세스에 연결합니다. 그런 다음 코드에 break(Visual C# 프로젝트의 경우) 또는 stop(Visual Basic 프로젝트의 경우)을 추가합니다.

  • 디버깅 기본 설정을 설정하여 \winnt\Microsoft.net\Framework\version에 있는 InstallUtil.exe를 시작하고 어셈블리에 매개 변수로 전달합니다. F5 키를 누르면 중단점이 적중됩니다. InstallUtil.exe는 MSI와 같은 방식으로 사용자 지정 작업을 실행합니다.

COM 인터페이스를 사용하여 어셈블리를 등록할 수 없는 경우

이 문제는 알려진 RegAsm 버그입니다. 예를 들어, 어셈블리의 종속성이 다른 클래스 라이브러리에 있는 경우 등록 정보를 가져오도록 RegAsm이 호출되므로 RegisterCOM이 작동되지 않을 수 있습니다. RegAsm이 \obj 디렉터리에서 호출되기 때문에 종속성을 찾을 수 없고 RegAsm은 알림 없이 실패합니다. \bin 디렉터리에서 수동으로 어셈블리를 추가하는 것이 가장 좋은 해결 방법입니다. 다른 해결 방법으로 RegisterSelfReg를 사용할 수 있습니다.

이 경우에도 RegAsm/Codebase를 사용하여 수동으로 등록해야 합니다. 어셈블리가 공유된 위치에 있지 않는 경우 호출 코드와 같은 디렉터리에 있지 않으면 해당 어셈블리를 찾을 수 없습니다. /Codebase는 디렉터리를 레지스트리로 입력합니다.

로그 파일을 사용하여 Windows Installer 설치 문제를 해결하는 방법

Windows Installer에서는 프로그램을 설치하는 동안 수행되는 작업을 로그 파일에 기록합니다. 로그 파일은 .msi 파일이 상주하는 디렉터리에 있습니다.

설치 로그 파일을 가져오는 방법

다음과 같은 두 가지 방법이 있습니다.

  • 로깅 스위치를 사용하여 명령줄에서 다음 명령을 실행합니다.

    misexec /i mysetup.msi /l*v mylog.txt
    
  • 다음을 .reg 파일로 저장하고 레지스트리에 로드합니다.

    REGEDIT4
    
    [HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer]
    "Logging"="voicewarmup"
    "Debug"=dword:00000007
    

    그런 다음 \temp 디렉터리를 열고 날짜순으로 정렬합니다. 최신 msi*.log 파일에는 가장 최근의 설치 또는 제거부터 표시됩니다.

이전에 설치한 제품의 하위 디렉터리에 설치하는 방법

  1. 이전에 설치한 Product 1이라는 제품이 설치되어 있고 MyFile.txt라는 이름의 파일이 있다고 가정합니다.

  2. Windows Installer SDK의 ORCA를 사용하여 File 테이블을 보고 MyFile.txt를 나타내는 행을 찾습니다.

  3. Component_ column의 값을 확인하고 Component 테이블을 엽니다.

  4. Component 테이블에서 Component 열에 Component_ value가 있는 행을 찾아서 ComponentID를 확인합니다. 이 값을 클립보드에 복사합니다. ORCA를 닫습니다.

  5. 설치 프로젝트에서 시작 조건 편집기를 열고 Windows Installer 구성 요소 검색을 추가합니다. 새 검색의 ComponentID 속성에 복사한 ComponentID를 붙여넣습니다.

  6. Property 속성을 복사합니다. 이 속성은 COMPONENTEXISTS1과 유사해야 합니다.

  7. 파일 시스템 편집기를 열고 응용 프로그램 폴더를 선택합니다.

  8. DefaultLocation 속성이 [COMPONENTEXISTS1]MySubFolder(COMPONENTEXISTS1의 경로에 후행 '\'가 포함되므로)와 유사하도록 편집합니다.

이전 절차의 6단계를 수행한 후 시작 조건 편집기에 조건을 추가하여 구성 요소가 있는지 확인하고, 구성 요소가 없는 경우 설치를 차단하고 메시지가 표시되도록 할 수 있습니다. 해당 조건은 COMPONENTEXISTS1(COMPONENTEXISTS1이 비어 있지 않은 경우 설치 관리자를 실행할 수 있음을 나타냄)이 됩니다.

기본 포트 이외의 포트에 사용자 지정 웹 폴더를 설치하는 방법

기본적으로 지정되지 않은 포트에 사용자 지정 웹 폴더를 설치하려면 명령줄에서 설치를 실행합니다. 명령줄에는 각 웹 사용자 지정 폴더에 대한 Property 속성 값을 포함해야 합니다. 일반적으로 값은 NEWWEBPROPERTY1과 유사합니다. 웹 응용 프로그램 폴더에 대해서도 TARGETPORT를 포함시켜야 합니다.

예를 들어, 웹 서버가 포트 20에 있는 경우 명령줄은 다음과 같습니다.

msiexec /i mywebsetup.msi TARGETPORT=20 NEWWEBPROPERTY1PORT=20

위의 명령은 하나의 웹 폴더에 대한 명령입니다. 웹 폴더가 둘 이상인 경우 각 폴더에 대해 이전에 지정한 것과 같은 PROPERTY=VALUE 쌍을 더 추가하여 나열된 각 폴더의 포트를 지정된 포트로 리디렉션합니다.

설치하는 동안 사용자 인터페이스의 포트가 변경되면 사용자 지정 웹 폴더에서는 명령줄 값이 사용되므로 설치 위치 대화 상자를 제거할 수도 있습니다.

웹 사이트 루트에 설치하는 방법

웹 사이트 루트(예: c:\inetpub\wwwroot)에 설치하려면 웹 설치 프로젝트에서 또는 설치하는 동안 VirtualDirectory를 빈 문자열로 설정합니다.

ServicedComponent를 GAC에 설치하고 COM+ 카탈로그에서 구성하는 방법

ServicedComponent를 GAC에 설치하고 COM+ 카탈로그에서 구성하는 경우 다음 컴파일 오류가 발생할 수 있습니다.

"Unable to build custom action named 'Primary output from RegServer (Active)' because the file's Folder property is set to Global Assembly Cache."

GAC의 어셈블리가 사용자 지정 작업이 실행될 때마다 항상 사용할 수 있는 것이 아니므로(GAC로 커밋됨) 이 설치는 지원되지 않습니다.

이 문제를 해결하려면 코드를 다른 파일에 넣고, 가능하면 GAC로 이동하지 않는 파일에 사용자 지정 작업 코드를 넣습니다. 코드를 이런 방식으로 배포할 수 없는 경우도 있습니다.

설치 후에 프로그램을 자동으로 실행하는 방법

  1. 다음 코드가 들어 있는 .vbs 파일을 만듭니다.

    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Run """" & Property("CustomActionData") & """",7,False
    Set WshShell = Nothing
    
  2. 설치 프로젝트를 열고 사용자 지정 작업 편집기로 이동합니다.

  3. 커밋 노드를 선택하고 마우스 오른쪽 단추를 클릭한 다음 새 사용자 지정 작업을 추가합니다.

  4. 파일 시스템을 검색하여 1단계에서 만든 .vbs 파일을 추가합니다.

  5. 다음 내용을 추가하여 CustomActionData 속성을 편집합니다. 여기서 YourApp.exe는 시작 응용 프로그램 파일의 이름입니다.

    [TARGETDIR]YourApp.exe

바로 가기에서 제거 링크를 만드는 방법

  1. 설치 프로젝트의 디렉터리에서 새 Uninstall.bat 파일을 만듭니다.

  2. 설치 프로젝트에서 ProductCode 속성(예: [12345678-1234-1234-1234-123412341234] 값)을 복사합니다.

  3. Uninstall.bat을 편집하여 다음 내용이 들어 있는 줄을 포함합니다. 여기서 ProductCode는 2단계에서 복사한 값입니다.

    Msiexec /x ProductCode

  4. 설치 프로젝트의 응용 프로그램 폴더에 Uninstall.bat을 추가합니다.

  5. Uninstall.bat을 마우스 오른쪽 단추로 클릭하고 바로 가기 만들기를 선택하여 바로 가기를 만듭니다.

  6. 설정 프로젝트의 해당 시작 메뉴 폴더에 바로 가기를 넣습니다.

  7. 바로 가기의 이름을 "<Application Name> 제거" 등으로 바꿉니다.

설치 프로젝트의 사용 방법에 대한 예제가 있는 위치

설치 프로젝트 사용 방법의 예제를 보려면 Windows Installer 배포 연습을 참조하십시오.

.NET Framework 기반 응용 프로그램의 배포를 계획하는 방법

Deploying .NET Framework-based Applications 가이드에서는 .NET Framework 기반 응용 프로그램의 효율적인 배포를 계획하고 구현하기 위해 알아야 할 정보를 제공합니다.

Windows Installer SDK를 다운로드하는 방법

Platform SDK 웹 사이트에서 Windows Installer SDK를 다운로드할 수 있습니다.

https://www.microsoft.com/downloads/details.aspx?familyid=a55b6b43-e24f-4ea3-a93e-40c0ec4f68e5&displaylang=en

Crystal Reports에 대한 업데이트와 도움말을 가져오는 방법

업데이트된 소프트웨어와 병합 모듈은 BusinessObjects.com 웹 사이트의 "Downloads & Updates" 페이지에서 설치할 수 있습니다.

http://support.businessobjects.com/fix/downloads_updates.asp

응용 프로그램과 함께 .NET Framework를 설치하기 위해 부트스트래퍼를 가져오는 방법

Microsoft .NET Framework Setup.exe 부트스트래퍼 샘플은 다음 위치에 있습니다.

https://www.microsoft.com/downloads/details.aspx?familyid=bf253cfd-1efc-4fc5-ba7e-6a6f21403495&displaylang=en

Visual Studio .NET Framework 부트스트래퍼 플러그 인은 다음 위치에 있습니다.

http://workspaces.gotdotnet.com/vsboot

"복구할 수 없는 빌드 오류입니다." 오류 메시지를 해결하는 방법

설치 및 배포 프로젝트를 빌드할 때 "복구할 수 없는 빌드 오류입니다." 오류 메시지가 나타나는 경우 다음 문서를 참조하십시오.

https://support.microsoft.com/kb/329214/ko의 "PRB: 설치 및 배포 프로젝트를 구축하는 경우 "복구할 수 없는 빌드 오류입니다" 오류 메시지 발생"

유효성 검사 오류 메시지를 해결하는 방법

An error occurred when validating. HRESULT = '80040155' 같은 오류 메시지가 나타나는 경우 https://support.microsoft.com/kb/329214/ko에서 "PRB: 설치 및 배포 프로젝트를 구축하는 경우 "복구할 수 없는 빌드 오류입니다" 오류 메시지 발생"을 참조하고 "등록되지 않은 경우"의 단계를 수행하십시오.

사용자 지정 작업으로 배포하는 동안 IIS를 수정하는 방법

https://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchusingcustomactionstomodifyinternetinformationserverduringdeployment.asp?frame=true에 나오는 "Modifying Internet Information Services During Deployment with Custom Actions" 문서에 몇 가지 문제의 해결 방법이 설명되어 있습니다. 여기에는 다음과 같은 내용이 포함됩니다.

  • 파일 시스템 편집기의 웹 폴더에서 사용할 수 없는 IIS 폴더의 설정을 수정하는 방법

  • Visual Basic 6 및 Visual Basic .NET 이상 버전을 모두 사용하는 혼합 응용 프로그램을 배포하는 방법

  • Visual Basic 6 응용 프로그램과 Visual Studio .NET 이상 응용 프로그램의 배포 변경 사항

"자동 배포"에 대한 정보가 있는 위치

https://msdn.microsoft.com/library/en-us/dv_vstechart/html/vbtchno-touchdeploymentinnetframework.asp에서 "No-Touch Deployment in the .NET Framework"를 참조하십시오.

ASP.NET 응용 프로그램을 배포하는 방법

Visual Studio .NET을 사용한 ASP.NET 응용 프로그램 배포에 대한 자세한 내용은 Deploying an ASP.NET App Using Visual Studio .NET을 참조하십시오.

Windows 2000에 설치한 후 응용 프로그램에 MDAC 2.8이 필요하다는 경고가 나타나면서 실패하는 경우

System.Data 네임스페이스를 참조하는 모든 응용 프로그램은 MDAC(Microsoft Data Access Components) 버전 2.8 이상에 종속됩니다. 대부분의 경우 필요한 파일은 운영 체제의 일부로 이미 설치되어 있습니다. 그러나 Windows 2000 서비스 팩 3 이하 버전에서는 응용 프로그램과 함께 이 구성 요소를 설치해야 할 수도 있습니다. 부트스트래퍼 패키지에 파일을 추가하거나 설치를 진행하는 동안 Microsoft에서 파일을 다운로드하여 이 구성 요소를 설치할 수 있습니다. 자세한 내용은 필수 구성 요소 배포(Visual Studio)를 참조하십시오.

관련 기술 자료 문서

다음 기술 자료 문서에서는 Windows Installer 배포 문제에 대한 정보를 제공합니다.

참고 항목

개념

배포 및 종속성

대체 배포 방법

참조

VirtualDirectory 속성

기타 리소스

응용 프로그램 및 구성 요소 배포

Windows Installer 배포 연습