2013-04-15 3 views
0

레거시 소프트웨어 버전에서 업그레이드 할 때 InstallShield .MSI가 레지스트리 값을 만들지 않는 문제가 있습니다. 레거시 소프트웨어는 몇 가지 값이있는 키 HKLM\\Software\Company\Appname을 생성했습니다. 최신 소프트웨어에서는 동일한 값에 새로운 값 Path을 추가하려고합니다 (단, 기존 값은 그대로 유지). 키 자체가 이미 존재하는 경우 설치 프로그램이 새 값을 만들려고 노력하지 않는 것 같습니다. InstallShield에서 노출 된 유일한 옵션은 제거 동작에 대한 여러 옵션과 함께 "존재하지 않는 경우 키 생성"을 둘러 쌉니다. "키가 이미 존재하는 경우에도이 값을 생성"할 수있는 방법이없는 것 같습니다.기존 키 아래에 새 레지스트리 값 설치

아무도 키가 이미 존재하더라도 레지스트리 값 항목을 만드는 방법을 알고 있습니까? 설치 제거 솔루션을 사용해도된다는 것을 제외하고는 InstallScript 솔루션에 신경 쓰지 않습니다.

+0

값을 설정하기 만하면됩니다. 그것은 아직 존재하지 않으면 가치를 창출 할 것입니다. –

+0

@HansPassant 그래도 아니야. 설치하는 동안 키가 존재하지 않는 경우 키를 작성하지만 키가 있으면 레지스트리 값이 작성되지 않습니다. – drharris

답변

0

추가 조사를 마친 후 재미있는 일이 실제로 일어나고있었습니다. MSI 로깅에서 설치 중간에 WriteRegistryValues 작업을 수행 한 다음 끝에 가까워지면 RemoveRegistryValues이 발생합니다. 결과적으로 설치가 완료되기 바로 전에 RemoveExistingProducts 작업이 끝나기 시작했기 때문입니다. 대신, 나는 그 행동을 InstallValidateInstallInitialize 행동 사이에서 위로 움직였다. 이렇게하면 레거시 제거가 먼저 수행 된 다음 나중에 올바른 레지스트리 설정이 설치됩니다. 전 레거시 제거 프로그램이 전체 키를 삭제하도록 요청한 것 같습니다.

이 문제와 관련된 다른 사람들에게는이 솔루션에 몇 가지 단점이 있습니다. 즉, 이전 제품 코드로 선언 된 항목이 제거되어 일부 설정을 덮어 쓰고 파일을 다시 쓸 수 있음을 의미합니다. 그러나 우리에게는 올바른 상태가 아닌 레지스트리의 대안보다이 단점이 더 낫습니다.

로그를 검토하기 전에 질문을 여는 것에 대해 사과하지만 다른 사람이이 솔루션의 혜택을 볼 수 있기를 바랍니다.

0

새 레지스트리 값으로 분리 된 구성 요소를 만들어야합니다. 그러면 모두 확인해야합니다. 레지스트리 키를 (InstallShield의) InstallShield에 현재 레지스트리 구성 요소에 추가하려했으나 설치 관리자가이 키를 업데이트하면이 구성 요소가 이미 설치되어 있고 아무 것도하지 않는다고 봅니다.

관련 문제