2013-10-08 1 views
0

우리는 관리자가 설치 및 제품 코드의 속성을 변경할 수 있도록 생각을했다. 관리자는 GPO 정책을 사용하여 새로운 msi를 푸시해야합니다. 이제는 MajorUpgrade가 될 것이므로 이전 속성이있는 이전 버전을 제거하고 새 속성을 가진 새 버전을 설치해야합니다.
그러나 작동하지 않는 제품 코드를 업데이트.Microsoft.Deployment.WindowsInstaller를 사용하여 ProductCode를 변경하는 방법? 배포 시나리오에서


db.Execute("UPDATE Property SET Value = '{30571D61-8994-449B-9725-90760DFE0467}' WHERE Property = 'ProductCode'")
예외가 발생을 실행.
[Microsoft.Deployment.WindowsInstaller.InstallerException] = {"Function failed during execution. Database: C:\..\MyInstaller.msi Table(s) Update failed."}

ProductCode를 업그레이드하려면 어떻게해야합니까?
(그것도 가능합니까?)

편집 : 테이블이 읽기 전용으로 열립니다
경우, 오류가 표시됩니다.
여기에 어떤 경우가 있습니다.

답변

1

이 SDK 문서는 ExecuteScalar는 단지 하나의 결과를 반환하는 SELECT 문에 사용할 수 있다고. 대신 Execute 메서드를 사용해야합니다.

using (Database database = new Database(@"C:\MSM\ISWIX.MSI", DatabaseOpenMode.Direct)) 
{ 
    database.Execute("UPDATE Property SET Value = '{00000000-0000-0000-0000-000000000000}' WHERE Property = 'ProductCode'"); 
} 

또한 ProductCode는 변경할 수 없기 때문에 설치 중에 사용자 지정 작업으로 수행 할 수 없습니다. 일반적으로 MajorUpgrade 시나리오에서는 빌드/컴파일 할 때 새 ProductCode를 할당합니다.

+0

죄송합니다, 그 오타이었다. 실제로 Execute를 사용하고 있습니다. 오류를 발견했습니다. 내 wrapper-class는 거꾸로 된 if를 가지므로 수정을 원할 때 읽기 전용으로 열었다. – leiflundgren