2

설치합니다, 그래서 좋은
Run exe after msi installation?열기 텍스트 파일 내가 설치된 제품을 여는 MSI 설치의 마지막에 체크 박스를 추가 할 수있는 솔루션을 다음 한

지금까지. 그러나 릴리스 노트가 들어있는 간단한 텍스트 파일을 여는 다른 checkBox를 추가하고 싶습니다. 이 파일은 기본 출력과 함께 설치 프로젝트에 이미 포함되어 있습니다. 새 checkBox를 추가 할 수 있습니다. 유일한 문제는 텍스트 파일을 여는 방법입니다 :


var sql 
var view 
var checkboxTextForReleaseNotes = "See release notes"; 
var fileReleaseNotes = "ReleaseNotes.txt"; 

try 
{ 
    var fileIdForReleaseNotes = FindFileIdentifier(database, fileReleaseNotes); 
    if (!fileIdForReleaseNotes) 
     throw "Unable to find '" + fileReleaseNotes + "' in File table"; 

    [ ... some actions to include another control as seen in link above ... ] 

    // Insert the new CheckboxReleaseNotes control 
    sql = "INSERT INTO `Control` (`Dialog_`, `Control`, `Type`, `X`, `Y`, `Width`, `Height`, `Attributes`, `Property`, `Text`, `Control_Next`, `Help`) VALUES ('FinishedForm', 'CheckboxReleaseNotes', 'CheckBox', '18', '140', '343', '12', '3', 'LAUNCH_RN', '{\\VSI_MS_Sans_Serif13.0_0_0}" + checkboxTextForReleaseNotes + "', 'CloseButton', '|')"; 
    view = database.OpenView(sql); 
    view.Execute(); 
    view.Close(); 

    // Modify the Order of the EndDialog event of the FinishedForm to 1 
    sql = "SELECT `Dialog_`, `Control_`, `Event`, `Argument`, `Condition`, `Ordering` FROM `ControlEvent` WHERE `Dialog_`='FinishedForm' AND `Event`='EndDialog'"; 
    view = database.OpenView(sql); 
    view.Execute(); 
    record = view.Fetch(); 
    record.IntegerData(6) = 1; 
    view.Modify(msiViewModifyReplace, record); 
    view.Close(); 

    // Insert the Event to launch the release notes 
    sql = "INSERT INTO `ControlEvent` (`Dialog_`, `Control_`, `Event`, `Argument`, `Condition`, `Ordering`) VALUES ('FinishedForm', 'CloseButton', 'DoAction', 'OPEN_RN', 'LAUNCH_RN=1', '0')"; 
    view = database.OpenView(sql); 
    view.Execute(); 
    view.Close(); 

    // Insert the custom action to open the release notes when finished 
    sql = "INSERT INTO `CustomAction` (`Action`, `Type`, `Source`, `Target`) VALUES ('OPEN_RN', '210', '" + fileIdForReleaseNotes + "', '')"; 
    view = database.OpenView(sql); 
    view.Execute(); 
    view.Close(); 

    database.Commit(); 
} 
catch (e) 
{ 
    WScript.StdErr.WriteLine(e); 
    WScript.Quit(1); 
} 
내가 그 유형을 알고 " 이 http://msdn.microsoft.com/en-us/library/windows/desktop/aa372048%28v=vs.85%29.aspx

여기에 내 현재 JS 코드입니다 : 어떤 사용자 지정 작업은 내가 여기에서 볼 수 있듯이 이러한 요구에 맞게 보인다210 "사용자 정의 작업에 대한 적절한 하나가 아니지만 ... 거기에 무엇입니까? 또는 실제로 Jscript 또는 VBScript를 시작하여 실제로 진행해야합니까?

편집 : 코드 완성이 완료되었습니다. "vdproj"속성을 통해 사용자 지정 작업을 추가하려고했지만 파일이 호환되지 않기 때문에 거부합니다.

답변

0

다음은 모두 테스트되지 않았습니다.

나는 당신이 custom action type 34msidbCustomActionTypeAsync + msidbCustomActionTypeContinue에 ASync/NoWait를 실행 시키길 원한다고 생각합니다. 따라서 사용자 정의 작업 유형은 34 + 192 = 226입니다.

Source은 문서에 따라 대상 실행 파일과 동일한 디렉토리 일 필요는 없습니다.

Target은에서 CustomAction 테이블의

목표 컬럼은 실행에 선택적 인수 다음에 실행 파일의 전체 경로와 이름을 포함 ...입니다. 실행 파일의 전체 경로와 이름이 필요합니다. 긴 파일 이름이나 경로는 따옴표로 묶어야합니다. 값은 형식화 된 텍스트로 취급되며 특성, 파일, 디렉토리 또는 기타 형식화 된 텍스트 속성에 대한 참조를 포함 할 수 있습니다.

"start" shell command을 사용하여 셸을 사용하여 텍스트 파일을로드 할 수 있습니다. 그러면 사용자의 기본 텍스트 파일 뷰어를 사용하여 텍스트 파일이 열립니다. start.exe의 전체 경로와 릴리스 정보의 전체 경로가 필요합니다. 문서가 Target 필드에서 문자열 바꾸기를 수행하는 방법에 유의하십시오. There's a string format 주어진 파일의 전체 경로를 얻으려면 File 테이블 키가 있어야합니다.

[#filekey] 형식의 부분 문자열이 발견되면 filekey 값을 File 테이블의 키로 사용하여 파일의 전체 경로로 대체됩니다.

모두 함께, 다음은 Target 위해 일할 수 있다는 퍼팅 :

"[SystemFolder]start.exe" "[#someFileKey]" 

모든 말했다되고, 당신은 정말 볼 것 이러한 사용자 지정 작업의 더 많은 일을 할 거라면 Wix으로 이동하고 나만의 맞춤 동작을 작성합니다. Wix는이 자바 스크립트 포스트 빌드를 실행하지 못하도록합니다. 사용자 지정 작업을 작성하면 .NET 또는 Windows API에 직접 액세스 할 수 있습니다.예를 들어, C#에서 쉘을 사용하여 파일을 여는 것은 pretty straight forward입니다.

+0

사실 WiX는 훨씬 더 많은 가능성을 제공하지만, 스레드를 위해서이 비트를 끝내려고 노력할 것입니다. 올바르게 이해하면 SQL 쿼리는 다음과 같아야하지만 작동하지 않습니다. 오류가 발생하지 않습니다. 'sql = "INSERT INTO"'CustomAction'' (''Action'','' VALUES ('OPEN_RN', '226', '', '\ "[System] start.exe \"\ "[#"+ fileIdForReleaseNotes + " ] ")"; " 소스에 대해 잘 모르겠습니다. 비어있을 수 있습니까? – tjafaas

+0

죄송합니다. [SystemFolder]가 [System]이 아닙니다. 나는 [여기] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa370905 (v = vs.85) .aspx)에서 그 값을 얻고있었습니다. 문서 도구는 소스를 무시한다고 말합니다. 어쩌면 거기에 [SystemFolder]를두고 상황이 바뀌는 지 확인하십시오. fileIdForReleaseNotes가 올바른지 확인하십시오. Orca에서 .MSI를 열고 File 테이블을 봅니다. 원하는 것은 파일 열의 값입니다. –

+0

[#filekey]에 대한 문서의이 부분에 문제가 생길 수도 있습니다. "[#filekey] 값은 공백으로 남으며 설치 관리자가 CostInitialize 작업, FileCost 작업 및 CostFinalize 작업을 실행할 때까지 경로로 대체되지 않습니다 . " –