我遇到了如何解决这个问题的严重问题:我不知道OnAfterInstall事件的去向。
让我解释一下自己。我创建了一个C#项目,它完美地编译并在Release模式下构建。之后,我使用向导创建了一个Setup Project。我添加了一个额外的对话框,允许用户在两种语言之间进行选择。现在,我的问题是我想将该语言存储到注册表(或app.config文件中,越简单越好),并且我已经读过你需要在继承的Installer类中的OnAfterInstall方法中检测它。
现在,我应该把那个班级放在哪里? Logic告诉我它在C#项目中,但它抱怨Context和Installer类都不存在。当我将此类添加到安装项目时,它不会抱怨,但在此之后它不起作用。这是班级。
using System;
using System.Configuration.Install;
public class Install : Installer
{
public Install()
{
}
protected override void OnAfterInstall(IDictionary savedState)
{
string lang = Context.Parameters["lang"];
RegistryKey key = Registry.LocalMachine;
using (key = key.CreateSubKey(@"SOFTWARE\MyCompany\MyApp"))
{
key.SetValue("lang", lang);
key.Close();
}
base.OnAfterInstall(savedState);
}
}
PS:我已经使用/ lang = [LANG](其中LANG是无线电值)将lang
作为CustomActionData传递
答案 0 :(得分:5)
首先,您应该将RunInstallerAttribute
添加到您的课程中。
[RunInstaller(true)]
public class Install : Installer
...
接下来,将安装程序放在一个单独的项目(类库)中,例如MyCustomInstaller。
最后,将此项目的主要输出添加到安装项目的自定义操作编辑器中的自定义操作。
取决于你想要使用的which custom action。