2011-03-14 3 views
1

내 프로젝트에서 사용할 사용자의 라이센스 코드를로드하는 프로젝트에 사용자 지정 설치 방법이 있습니다. 코드는 다음과 같습니다 : 내가 실행하고있어 내 사용자는 지속적으로 다시 키 자신의 라이센스 코드를에서 "텍스트 상자 (A)"사용자 인터페이스 대화 나 '에가있는 그러나 상태인지내 VS Installer에서 컨텍스트 매개 변수를 미리로드하려면 어떻게해야합니까?

public override void Install(IDictionary stateSaver) 
{ 
    base.Install(stateSaver); 

    string targetDirectory = Context.Parameters["targetdir"]; 
    string licenseCode = Context.Parameters["liccode"]; 

    string exePath = string.Format("{0}prog1.exe", targetDirectory); 

    Configuration config = ConfigurationManager.OpenExeConfiguration(exePath); 
    config.AppSettings.Settings["LicenseCode"].Value = licenseCode; 
    config.Save(); 
} 

추가되었습니다. 그래서 내가하고 싶은 것은 값이 저장되어있는 레지스트리를 읽고 저장된 값으로 설치 프로그램 화면을 미리 채 웁니다.

그래서 여기에 내가 시도한 것이 있지만 이것은 작동하지 않는 것 같습니다. 이벤트 체인의 올바른 지점에서 해고되지 않았기 때문일 것입니다.

protected override void OnBeforeInstall(IDictionary savedState) 
{ 
    RegistryKey key; 
    string baseKey = "SOFTWARE\\Test\\Prog1"; 
    try 
    { 
     key = Registry.LocalMachine.OpenSubKey(baseKey, false); 

     Context.Parameters["liccode"] = key.GetValue("LicenseCode").ToString(); 
    } 
    catch(Exception e) 
    { 
    } 

    base.OnBeforeInstall(savedState); 
} 

누구에게이 방법에 대한 제안이 있습니까?

답변

0

시스템 검색 (AppSearch 및 RegLocator 테이블)을 사용하여 값을 설치 시작시 속성으로 가져올 수 있습니다. 이렇게하려면 사용자 지정 작업이 필요하지 않습니다.

BTW, VDPROJ 및 InstallUtil에는 몇 가지 심각한 단점이 있습니다. 나는 대부분의 설치 관리자를 WiX 병합 모듈에 포함시키고 InstallUtil을 DTF로 대체하는 방법을 살펴볼 것입니다 (처음에는 모든 사용자 지정 작업을 제거 할 수 없다고 가정)

+0

사용자 지정 작업을 사용하지 않고, 라이센스 코드를 캡처하기위한 "텍스트 상자 (A)"대화 상자. 레지스트리 검색을 설정하고 속성을 볼 수 있지만 대화 상자에 해당 값을 미리 채우는 방법은 표시되지 않습니다. 거기에 어떤 생각? – SeaSharp

+0

알겠습니다. – SeaSharp

+0

그래서 Christopher Painter의 제안에 따라 레지스트리 검색을 설정했습니다. 그렇게함으로써, 그것은 나에게 속성 이름을 주었다. 그런 다음 User Dialog "EDIT1VALUE"속성에서 레지스트리 검색에서 [PROPERTYNAME]으로 설정했습니다. 빌라! – SeaSharp

관련 문제