如何在VS安装程序中预加载Context参数?

时间:2011-03-14 13:27:49

标签: c# winforms visual-studio-2008 windows-installer

我在项目中有一个自定义Install方法,我正在加载用户许可证代码以便在我的项目中使用。代码如下所示:

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

然而,我正在运行的是我的用户经常不得不将他们的许可证代码重新键入我添加的“Textboxes(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);
}

有人建议如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您可以使用系统搜索(AppSearch和RegLocator表)在安装开始时将值拉入属性。您不应该需要自定义操作来执行此操作。

BTW,VDPROJ和InstallUtil有一些严重的缺点。我会考虑将大部分安装程序分解为WiX Merge模块并将您的InstallUtil替换为DTF(假设您无法首先消除所有自定义操作)