0

을 설정합니다. 제거시 다시 설정해야하는 값이있는 특정 키 아래에 레지스트리 값을 설정하고 싶습니다. 내 프로그램의 오래된 가치.VS 설치 프로젝트 - 사용자 지정 작업으로 레지스트리 값 설정 (다시) 내 프로그램 설치 중에

protected override void OnBeforeInstall(IDictionary savedState) { 
     var originalCommand = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\myKey\Shell\Open\Command", null, ""); 
     Registry.SetValue(@"HKEY_CURRENT_USER\Software\myProgram\OriginalCommand", null, originalCommand); 
     Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\myKey\Shell\Open\Command", null, "new value"); 
     base.OnBeforeInstall(savedState); 
    } 

    protected override void OnAfterRollback(IDictionary savedState) { 
     ResetRegistryEntries(); 
     base.OnAfterRollback(savedState); 
    } 

    protected override void OnAfterUninstall(IDictionary savedState) { 
     ResetRegistryEntries(); 
     base.OnAfterUninstall(savedState); 
    } 

    private void ResetRegistryEntries() { 
     var originalCommand = Registry.GetValue(@"HKEY_CURRENT_USER\Software\myProgram\OriginalCommand", null, ""); 
     Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\myKey\Shell\Open\Command", null, originalCommand); 
    } 

이 이상한 일들이 처음 .. 이제이 있습니다 : 나는 비주얼 스튜디오를 통해 설치하는 경우 (오른쪽 내 설치 프로젝트를 클릭하고 설치) 모든 것이 잘 작동 .. 나의 새로운 가치 나 사용자 지정 작업과 함께이 문제를 해결하려 설정되어 있고 이전 값이 내 "백업"레지스트리 키에도 설정되어 있습니다. 모든 항목을 제거하면 제거해야합니다. 하지만 .. 만든 된 .msi 파일을 통해 설치하면 이전 값은 내 백업 레지스트리 키에 설정되어 있지 않습니다 ..하지만 새로운 가치는 .. 그리고 매우 stange 건 .. 내가 모든 것을 재설치하면 .. 재설정 왜 .. 그리고 왜 어디에서.

답변

0

나는 완전히 이벤트의 시퀀스를 이해하지 않고 당신이 원하는 정확히하지만, : 사용자 지정 작업이 호출

  1. 에도 불구하고 "BeforeInstall는"이 전에없는 설치 - 그것은 모든 후 파일이 설치되고 IDE의 모든 레지스트리 항목이 기록됩니다. 따라서 IDE의 레지스트리보기에서 설정 한 모든 레지스트리 항목을 덮어 쓰게됩니다.

  2. "제거 후"는 마찬가지로 잘못 명명되었습니다. 제거 프로세스 초기와 모든 레지스트리 값 (IDE 레지스트리보기로 설치된)이 제거되기 전에 상당히 빠릅니다.

레지스트리 값을 저장하거나 설치하기 전에 저장하기 위해 "설치하기 전에"실제 문제가있을 수 있습니다. Orca로 MSI 파일을 열고 InstallExecuteSequence 테이블 (시퀀스 순서를 클릭하여 올바른 순서로 정렬)을보고 사용자 지정 작업이 호출 된 위치를 볼 수 있습니다 (이름은 밑줄로 시작하는 16 진수 문자열입니다). RemoveRegistryValues ​​및 WriteRegistryValues ​​작업.