【问题标题】:How to get folder path of Installed application, from Visual Studio 2012如何从 Visual Studio 2012 获取已安装应用程序的文件夹路径
【发布时间】:2014-05-15 14:35:54
【问题描述】:

您好,我在 PC 中创建了 2 个 WPF 应用程序。让我们假设第一个是“OneApp”,另一个是“TwoApp”。我在 Visual Studio 2012 中创建了这个。我已经从安装程序中安装了 OneApp。现在我想通过“TwoApp”应用程序以编程方式运行“OneApp”。那么如何找到“OneApp”应用程序的路径呢?或者如果我们可以手动设置“OneApp”安装目录,那也很棒。

编辑:

我按照建议尝试了 System.IO.Path.GetDirectoryName。但我得到的文件夹路径如下

我不能像其他普通应用程序一样安装在 Program Files 中吗?

【问题讨论】:

  • 对不起,我不太明白这个问题。你是这个意思吗? Process.Start?
  • 没有。我需要知道,OneApp 安装在哪里?这样我就可以通过“TwoApp”应用程序启动 OneApp 应用程序。
  • 您的路径看起来像是已安装 ClickOnce 应用程序的路径,而不是使用安装功能安装的应用程序的路径。如果它 ClickOnce 应用程序,那么 正确的安装路径...它们全部 存储在AppData 文件夹中安全原因。
  • 我如何使用设置功能创建构建?
  • 请参阅this video on YouTube,了解将安装项目添加到您的应用程序的示例...如果您看一下,您可能会找到更好的。

标签: c# wpf visual-studio-2012 directory installation


【解决方案1】:

您一般可以向Assembly 询问它在硬盘上的位置。这应该会给你一个以C:\ 开头的路径(如果它显然在 C 驱动器上)......试试这个:

Assembly assembly = Assembly.GetExecutingAssembly();
Uri uri = new Uri(Path.GetDirectoryName(assembly.CodeBase));

在我的开发环境 (Visual Studio) 中,这给了我这个:

C:/DevelopmentProjects/AppName/ProjectName/bin/Debug

例如。它是程序集运行的地方。在已安装的应用程序上,它应该告诉您该程序集从哪里运行。

【讨论】:

  • 但是“TwoApp”如何获取“OneApp”安装目录呢?我认为“OneApp”安装的文件夹位置每次都会改变,在每台机器上?
  • @VarunJi :我认为您可能必须使用 registry 来获取已安装应用程序的路径。您可以从这里找到它 - HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall。试试看,让我们知道...
  • 是的,如果是 ClickOnce 应用程序,那就对了。更糟糕的是,它会在一个文件夹中,就像你展示的那个名字一样可怕的 guid ......一个你永远猜不到或计算出来的文件夹。
  • 我是 C# 新手。所以请帮帮我。如何以编程方式使用 HKLM\Software\Microsoft\Windows\CurrentVersion?
  • @VarunJi :但首先在 registry 编辑器中检查您的 OneApp 密钥是否存在 - "HKLM\Software\Microsoft\Windows\CurrentVersion\卸载”与否??先确认一下。
【解决方案2】:

wifomrs 中是:

 Application.StartupPath

但是 wpf 的情况并非如此,您看起来像:

添加 System.IO 引用:

using System.IO;

string baseDir=  System.AppDomain.CurrentDomain.BaseDirectory

string baseDir= System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)

【讨论】:

  • 我尝试了 System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName),但它显​​示了当前应用程序的路径。我们不能像 c:\program files\.... 等其他普通应用程序一样每次都获得静态路径吗?
【解决方案3】:

毕竟点击并尝试方法。我刚刚在博客中找到了解决此问题的更好方法。链接是

http://robindotnet.wordpress.com/2010/03/21/how-to-pass-arguments-to-an-offline-clickonce-application/

我的代码是获取应用程序:首先获取该应用程序的快捷方式,然后打开该快捷方式即可正常工作。您还可以在上面的链接中查看如何将数据发送到其他应用程序。

StringBuilder sb = new StringBuilder();
sb.Append(Environment.GetFolderPath(Environment.SpecialFolder.Programs));
sb.Append("\\");
//publisher name is OneApp
sb.Append("OneApp");
sb.Append("\\");
//product name is OneApp
sb.Append("OneApp.appref-ms");
string shortcutPath = sb.ToString();
Console.WriteLine(shortcutPath);

//Start the One App installed application from shortcut
System.Diagnostics.Process.Start(shortcutPath);

【讨论】:

    猜你喜欢
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多