2014-10-01 3 views
0

WiX에서 MsiExec에서 제공 한 오류 메시지를 변경하는 방법이 있습니까? 목표는 사용자가 대상 제품을 설치하지 않고 패치를 설치하려고 할 때 나타나는 메시지를 사용자 정의하는 것입니다.WiX : MsiExec.exe 오류 메시지 (Windows Installer 오류 메시지 아님) 변경

나는 UI 섹션

<Error Id="1642">You must install my product before installing this patch.</Error> 

를 추가 시도했지만 작동하지 않는 것 같습니다.

Windows Installer errorsMsiExec errors 사이에 큰 차이가 있다고 생각됩니다.

누구도 이것을 한 적이 있습니까?

답변

0

MsiExec의 텍스트를 덮어 쓸 수 없습니다. MSI 테이블 "Error"및 "ActionText"의 일부 메시지 만 덮어 쓸 수 있으며, 후자는 설치 프로세스 중에 진행률 표시 줄을 나타내는 메시지입니다.

가장 중요한 것은 "오류"테이블의 번호가 내부 번호인지,하고 반환 오류 코드와는 아무 상관이 없다 : 당신이 테이블의 내용을 덮어 쓸 수 있습니다 윅스와

을 "오류 "그러나 링크 나 예제 msi 파일에서 볼 수 있듯이 번호 매기기는 자체적으로 고유하며 반환 코드 (0, 1603, 3010, 1642, ...)와 관련이 없으며 해당 메시지는 출력됩니다. 이 오류 메시지의 대부분은 로그 파일의 출력을위한 것이라고 생각합니다.하지만 대화 상자에 표시 될 수도 있습니다. 시도해야합니다.

반송 오류 코드 1642의 경우 해당 텍스트가 해당 테이블에 없습니다. 패치 관련 오류 메시지 (예 : 아니오)가 있습니다. 예를 들어, 1328은 다른 시나리오를위한 것입니다.

그러나 일반적으로 사용자가 msiexec 명령을 두 번 클릭하거나 타이핑하여 시작하도록하지는 않습니까? 대신 배치/스크립트/setup.exe 또는 설치 서비스이 있습니다.

거기에서 메시지을 포장해야합니다. 많은 설치가이 작업을 수행하고 자동 설치를 시작합니다 (예 : (. 물론 더 나은 구조와/다른,하지만 당신은 자신의 메시지를 제공 할 리턴 코드 의존하는 경우)

call msiexec /i "c:\mypath\mysetup.msi" /qn /L*v "c:\mylog.log" 
SET SetupSuccess=%ERRORLEVEL% 
if '%SetupSuccess%' EQU '0' echo Yes, setup successful. 
if '%SetupSuccess%' EQU '1642' (
    echo. 
    echo "You must install my product before installing this patch." 
) 

+0

: "msiexec /quiet"또는 "msiexec /qn"

단순화 된 배치 예와 msiexec을 실행하는 실행 파일이 있지만 전체 UI로 실행되므로 사용자는 오류 메시지를 볼 수 있습니다. 패치를 설치하기 전에 대상 제품이 있는지 확인할 수 있습니다. 그냥 중복되는 것 같습니다. – chickenpie

+1

패치가 수행하기 전에 Windows Installer가 해당 오류를 발견합니다. 대상 제품이 설치되어 있지 않으면 Windows가 해당 제품을 처리하며 사용자는 아닙니다. 제품 코드가 설치되어있는 경우 처음 보는 실행 파일로 패치를 래핑하면 메시지를 보낼 수 있습니다. 더 나아가 설치되어있는 버전이 자신의 말로는 적용되지 않거나 이미 설치되었다고 말하고 싶다면 패치 버전보다 낮은 지 확인하십시오. MsiGetProductInfo() 및 MsiApplyPatch() – PhilDW

+0

예, PhilDW에 동의합니다. 그것은 중복되지 않지만 전에 그것을 확인하는 좋은 방법입니다. 패치를 적용 할 수있는 특정 기능 중 하나는 MsiDeterminePatchSequence()입니다.나는 그것을 독자적으로 사용하지 않았지만, 두 번째 읽기 후에는 처음으로 읽은 후로 그렇게 불편하지는 않습니다. :-) – Philm