Получение пути приложения во время установки - PullRequest
12 голосов
/ 13 октября 2010

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

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

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

Есть идеи?

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

Ответы [ 4 ]

36 голосов
/ 13 октября 2010

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

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

/targetdir="[TARGETDIR]\"

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

2 голосов
/ 11 марта 2014

Я знаю, что это 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
0 голосов
/ 25 января 2019
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
0 голосов
/ 29 марта 2017

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

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