2011-03-14 36 views
1

我在一個項目中有一個自定義的安裝方法,我正在加載用於我的項目的用戶許可證代碼。代碼如下所示:如何預先加載我的VS安裝程序中的上下文參數?

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(); 
} 

什麼我運行中卻是我的用戶不得不經常重新輸入他們的許可證代碼到「文本框(A)」的用戶界面對話框,我我補充說。所以我想要做的是讀取存儲值的註冊表,並用存儲值預填充安裝程序屏幕。

所以這裏是我的嘗試,但這似乎並沒有工作......也許是因爲它沒有在事件鏈中的正確點解僱。

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表)在安裝開始時將值拉入屬性。您不應該需要自定義操作來執行此操作。

順便說一句,VDPROJ和InstallUtil有一些嚴重的缺點。我會考慮將大部分安裝程序分解爲一個WiX合併模塊,並將您的InstallUtil替換爲DTF(假設您無法排除您的所有自定義操作)

+0

我不使用自定義操作,只是一個「文本框(A)」對話框來捕獲他們的許可證代碼。我發現我可以設置註冊表搜索並查看屬性,但是我沒有看到使用該值預填充對話框的方法。那裏有任何想法? – SeaSharp 2011-03-14 14:29:19

+0

明白了,非常好。 – SeaSharp 2011-03-14 14:57:38

+0

因此,我根據Christopher Painter的建議設置了註冊表搜索。這樣做,它給了我一個屬性名稱。然後在用戶對話框「EDIT1VALUE」屬性中,我將其設置爲來自注冊表搜索的[PROPERTYNAME]。瞧! – SeaSharp 2011-03-14 14:59:38

相關問題