winforms 在安装过程中获取应用程序路径

vdzxcuhz  于 2023-10-23  发布在  其他
关注(0)|答案(5)|浏览(161)

我正在部署一个应用程序,在安装过程中,在用户选择安装应用程序的位置后,我希望获得该路径;我在一个自定义的行动已经,但我不知道如何获得应用程序的路径,它将被安装!
它是Windows窗体,我正在使用Visual Studio 2010“C#”进行开发。
我正在使用默认的部署工具...
有什么想法吗?
提前感谢…

pw9qyyiw

pw9qyyiw1#

您的自定义操作所在的类应继承自System.System.Installer.Installer。这上面有一个名为Context的参数,它有一个参数字典。字典包含了一些关于安装的有用变量,你可以添加一些。
在“自定义操作”窗格中将自定义安装程序添加到安装项目后。选择“安装”操作并将CustomerData属性设置为:

/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.
    } 
}
pokxtpni

pokxtpni2#

我知道这是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
yrdbyhpb

yrdbyhpb3#

很抱歉为老帖子提供答案,但我的答案可能会帮助其他人。

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

wd2eg0qa4#

System.IO.Path.GetDirectoryName(this.Context.Parameters["assemblypath"]);
eyh26e7m

eyh26e7m5#

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

相关问题