2013-04-16 2 views
1

Wix DTF 사용자 지정 동작을 사용하여 MSI 런타임 세션 값을 레지스트리에 쓰려고합니다. 이것은 데이터베이스의 "레지스트리"테이블에 임시 레코드를 추가하여 달성하고자했습니다. C++에는이를 달성하기 위해 WcaAddTempRecord 메서드가 있었기 때문에 DTF에 동일한 메소드가 있는지 실제로 알고 싶었습니다.Wix DTF 사용자 지정 작업 WcaAddTempRecord에 해당하는 단어

참고 : Session.Database.OpenView을 사용하여 레코드를 삽입했지만 일관되게 세션 데이터베이스 읽기 전용 속성으로 인해 업데이트 할 수 없습니다. 오류가 발생했습니다.

이 상황에 가장 적합한 방법을 제안 해 주실 수 있습니까?

답변

0

MSI 데이터베이스는 설치 중에 읽기 전용입니다. 따라서 영구 행을 추가 할 수 없습니다. 그러나 임시 행을 삽입 할 수 있습니다. Session.Database.OpenView()에서 View을 얻으면 View 개체의 InsertTemporary() 메서드를 사용하여 임시 행을 추가하십시오.

이렇게하면 WcaAddTempRecord()온도가이됩니다. :)

0

이 내 도우미 메서드 "로 이동"

private static void InsertTempRecord(Session session, string tableName, Object[] objects) 
{ 
    Database db = session.Database; 
    string sqlInsertSring = db.Tables[tableName].SqlInsertString + " TEMPORARY"; 
    session.Log("SqlInsertString is {0}", sqlInsertSring); 
    View view = db.OpenView(sqlInsertSring); 
    view.Execute(new Record(objects)); 
    view.Close(); 
} 

자세한 내용은 다음을 참조하십시오

Dynamic Windows Installer UI

+0

감사 롭와 크리스. – user2286870

+0

위의 방법을 사용했지만 테이블 업데이트에 오류가 발생했습니다. 보기 바로 전에 InsertTemporary를 추가했을 때 View view = db.OpenView (sqlInsertSring); view.InsertTemporary (새 레코드 (6)); 보기. 실행 (새 레코드 (개체)); 나는 Database :를 얻는다. 커서가 유효하지 않아 진행할 수 없습니다. – user2286870

+0

테이블이 있습니까? WiX는 MSI를 만들 때 사용하지 않는 테이블을 버리는 경향이 있습니다. EnsureTable 요소를 사용하여이를 수행하지 않도록 지시 할 수 있습니다. 올바른 숫자와 유형의 객체를 전달하고 있습니까? 나는 여러 가지 설치 방법으로이 방법을 사용했는데 그것이 작동한다는 것은 의심의 여지가 없습니다. –