Куда уходит событие OnAfterInstall? - PullRequest
4 голосов
/ 08 декабря 2011

У меня были серьезные проблемы с решением этой проблемы: я не знаю, где происходит событие OnAfterInstall.

Позвольте мне объяснить. Я создал проект C #, который прекрасно компилируется и построен в режиме Release. После этого я создал проект установки с помощью мастера. Я добавил дополнительный диалог, который позволяет пользователю выбирать между двумя языками. Теперь моя проблема в том, что я хочу сохранить этот язык в реестре (или в файле app.config, чем проще, тем лучше), и я прочитал, что вам нужно обнаружить его в методе OnAfterInstall в унаследованном классе Installer.

Теперь, куда мне поместить этот класс? Логика говорит мне, что он идет в проекте C #, но жалуется, что не существует ни контекста, ни класса установщика. Когда я добавляю этот класс в проект установки, он не жалуется, но после этого не работает. Вот класс.

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 как CustomActionData, используя / lang = [LANG] (где LANG - значение радио)

1 Ответ

5 голосов
/ 08 декабря 2011

Сначала вы должны добавить RunInstallerAttribute к себе класс.

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

Затем поместите установщик в отдельный проект (библиотеку классов), например, MyCustomInstaller.

Наконец,добавьте основной вывод этого проекта к настраиваемому действию в редакторе настраиваемых действий проекта установки.

enter image description here

Вам решать в , какое настраиваемое действие Вы хотите использовать.

...