如何获取应用程序的安装路径?

14
在使用C#编写Windows应用程序时,如何获取软件(例如考虑NUnit或类似MS Word的任何其他软件)的安装路径从我的项目中?另外,如何设置环境变量中设置的路径变量,以便我们只需在命令提示符中输入即可运行应用程序。
例如,如果我将NUnit安装在“ C:\ Program Files”中,则可以通过在命令提示符中键入'NUnit'来运行它,但如果我将其安装在不同的位置,则无法执行相同的操作。 我需要从我的项目中获取在系统中安装的NUnit或任何其他软件的位置或路径(具有Windows XP)。 编辑: 就像我可以从注册表中获取已安装程序的路径一样。 HKEY_CURRENT_USER->SOFTWARE
6个回答

15
使用系统和应用程序类。这将为您提供各种信息。
例如:Application.ExecutablePath
它还提供了您想要执行的方法。
编辑:还可以查看注册表读写指令here

你的意思是我可以使用这个来从我的应用程序中获取任何已安装程序的路径吗? - SyncMaster

12
Application.ExecutablePath (includes filename)
Application.StartupPath (not includes filename)

这将为您提供应用程序启动的路径。希望它是安装路径。


9
string appFileName = Environment.GetCommandLineArgs()[0];

这将为您提供可执行文件的完整路径。

string directory = Path.GetDirectoryName(appFileName);

提取目录。
string envPath = Environment.GetEnvironmentVariable("PATH");
Environment.SetEnvironmentVariable(envPath + ";" + yourPath); 

编辑当前进程的PATH环境变量。


1
这个代码提供了我的项目的exe文件位置,但我需要获取任何应用程序(如MS Word、Firefox等)的安装文件夹。 - SyncMaster

2

在C#中,Application.StartupPath用于获取安装位置。


0
如果我在“C:\Program Files”中安装Nunit,我可以通过在cmd提示符中输入“nunit”来运行它,但如果我在其他位置安装,则无法这样做。
也许您正在使用Windows Vista,它可以在Program Files中搜索,但不会查找其他文件夹。
在Windows中使用C#,如何获取软件(例如考虑nunit)的安装路径?
这取决于您如何安装应用程序。安装程序知道路径,您可以编程安装程序将该路径写入某个地方,例如注册表。
还有如何设置环境变量中设置的路径变量,以便我们只需在命令提示符中输入即可运行应用程序。 如何在C#中获取和设置环境变量?

谢谢你提供的链接。但是我需要获取任何应用程序(如MS Word、Firefox等)的安装文件夹。 - SyncMaster
我能想到的唯一方法是读取环境路径变量。拆分路径并在所有文件夹中搜索。这不应该是一个任务。一些伪代码: envPath = System.Environment.GetEnvironmentVariable('Path'); string[] paths = envPath.Split(':'); foreach(string path in paths) File.Exists(Path.Combine(path, filename)); - Priyank Bolia

0

以下是从注册表中提取值的步骤代码片段。您可能已经知道,应用程序没有标准规则来放置其安装信息。下面显示的步骤适用于基于COM的应用程序,在这种情况下,应用程序必须以相当标准的方式提供本地可执行路径。

对于非COM应用程序,请检查是否可以从已安装应用程序缓存中提取一些数据。

我不得不承认,解决方案并不像我想象的那么优雅。每个子键都必须按顺序打开,并且单个方法中的打开无法正常工作。

//string hiveName = @"CLSID"; // for 64 bit COM 7applications
string hiveName = @"WOW6432Node\CLSID"; // for 32 bit COM applications
using (RegistryKey key = Registry.ClassesRoot.OpenSubKey(hiveName))

{
  if (key != null) {
      using (RegistryKey key2 = key.OpenSubKey("{<YourAppGUID>}"))
  {
  if (key2 != null) {
    using (RegistryKey key3 = key2.OpenSubKey("LocalServer32"))
  {
  if (key3 != null) {
    return key3.GetValue("").ToString();
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接