Получение пути приложения во время установки

Я развертываю приложение и во время установки после того, как пользователь выбирает место для установки приложения, я хочу получить этот путь; У меня уже есть пользовательское действие, но я не знаю, как получить путь к приложению, куда оно будет установлено!

Это Windows Forms, и я разрабатываю с использованием Visual Studio 2010 "С#".

И я использую инструмент развертывания по умолчанию...

Любая идея?

заранее спасибо...

Ответ 1

Класс, в котором находится ваше пользовательское действие, должен наследовать от System.Configuration.Installer.Installer. У него есть параметр, называемый Context, который имеет словарь параметров. Словарь содержит ряд полезных переменных об установке, и вы можете добавить их.

После того, как вы добавили пользовательский установщик в проект установки на панели "Пользовательские действия". Выберите действие "Установить" и установите для свойства CustomActionData значение:

/targetdir="[TARGETDIR]\"

Затем вы можете получить доступ к следующему пути:

[RunInstaller(true)]
public partial class CustomInstaller : System.Configuration.Install.Installer
{
    public override void Install(System.Collections.IDictionary stateSaver)
    {
        base.Install(stateSaver);
        string path = this.Context.Parameters["targetdir"]; 
        // Do something with path.
    } 
}

Ответ 2

Я знаю это VB, но это сработало для меня.

Private Sub DBInstaller_AfterInstall(ByVal sender As Object, ByVal e As   System.Configuration.Install.InstallEventArgs) Handles Me.AfterInstall

    MessageBox.Show(Context.Parameters("assemblypath"))

 End Sub

Ответ 3

Извините, что публиковал ответ для старого сообщения, но мой ответ может помочь другим.

public override void Install(System.Collections.IDictionary stateSaver)
{
    base.Install(stateSaver);
    rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
    if (rkApp.GetValue("MyApp") == null)
    {
        rkApp.SetValue("MyApp", this.Context.Parameters["assemblypath"]);
    }
    else
    {
        if (rkApp.GetValue("MyApp").ToString() != this.Context.Parameters["assemblypath"])
        {
            rkApp.SetValue("MyApp", this.Context.Parameters["assemblypath"]);
        }
    }
}

public override void Uninstall(System.Collections.IDictionary savedState)
{
    base.Uninstall(savedState);
    rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

    if (rkApp.GetValue("MyApp") != null)
    {
        rkApp.DeleteValue("MyApp", false);
    }
}

Ответ 4

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);