【问题标题】:Where does OnAfterInstall event go?OnAfterInstall 事件去哪儿了?
【发布时间】:2011-12-07 20:02:55
【问题描述】:

我在如何解决这个问题上遇到了严重的问题:我不知道 OnAfterInstall 事件的去向。

让我解释一下。我创建了一个可以完美编译并以发布模式构建的 C# 项目。之后,我使用向导创建了一个安装项目。我添加了一个额外的对话框,让用户可以在两种语言之间进行选择。现在,我的问题是我想将该语言存储到注册表中(或 app.config 文件,越简单越好),并且我读过您需要在继承的 Installer 类的 OnAfterInstall 方法中检测它。

现在,我应该把那个类放在哪里?逻辑告诉我它在 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 传递

【问题讨论】:

  • 您是否添加了对 System.Configuration.Install 的引用?
  • 也是我的错,谢谢=)

标签: c# windows windows-installer installation


【解决方案1】:

首先,您应该将RunInstallerAttribute 添加到您的课程中。

[RunInstaller(true)]
public class Install : Installer
...

接下来,将安装程序放在一个单独的项目(类库)中,例如MyCustomInstaller。

最后,将此项目的主要输出添加到设置项目的自定义操作编辑器中的自定义操作。

which custom action 由你决定。

【讨论】:

  • 哇,谢谢!我会在星期一试试这个(我今天刚开始为期 4 天的假期!)。这是打印屏幕附加的 +1 和 3 步说明
  • 是的,就像你说的那样。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 2011-03-03
  • 2014-03-15
  • 2015-07-17
  • 2012-10-30
  • 2013-05-23
  • 1970-01-01
相关资源
最近更新 更多