Получение пути приложения во время установки
Я развертываю приложение и во время установки после того, как пользователь выбирает место для установки приложения, я хочу получить этот путь; У меня уже есть пользовательское действие, но я не знаю, как получить путь к приложению, куда оно будет установлено!
Это 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);