在安装期间获取应用程序路径

时间:2010-10-13 15:18:26

标签: c# windows winforms setup-deployment

我正在部署应用程序,在用户选择安装应用程序的位置后的安装过程中,我希望获得该路径;我已经处于自定义操作中,但我不知道如何获取将要安装的应用程序路径!

这是Windows Forms,我正在使用Visual Studio 2010“C#”进行开发。

我正在使用默认的部署工具......

有什么想法吗?

提前感谢...

4 个答案:

答案 0 :(得分:36)

自定义操作所在的类应继承自System.Configuration.Installer.Installer。它有一个名为Context的参数,它有一个Parameters字典。该字典包含许多有关安装的有用变量,您可以添加一些。

在“自定义操作”窗格中将自定义安装程序添加到安装项目后。选择Install操作并将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.
    } 
}

答案 1 :(得分:1)

我知道它的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

答案 2 :(得分:0)

很抱歉发布旧帖子的回答,但我的回答可能对其他人有帮助。

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

答案 3 :(得分:-1)

def save(self, commit=True):
    instance = super(DocumentForm, self).save(commit=False)
    instance.filename = self.cleaned_data['file'].name
    if commit:
        instance.save()  # error occurs here
    return instance