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

时间:2009-05-26 09:27:01

标签: c# windows

在使用C#的Windows中,如何获取软件的安装路径(例如,考虑NUnit或任何其他软件,如MS word等)从我的项目?另外,如何设置我们在Environment变量中设置的路径变量,以便我们只需通过命令提示符运行应用程序。

就像我在“C:\ Program Files”中安装NUnit一样,我可以通过在cmd提示符下给出“NUnit”来运行它,但是如果我安装在不同的位置,我就不能这样做。 我需要从我的项目中获取NUnit或我系统中安装的任何其他软件(使用Windows XP)的位置或路径。

编辑: 就像我可以从注册表中获取已安装程序的路径。 HKEY_CURRENT_USER->软件

6 个答案:

答案 0 :(得分:11)

使用系统和应用程序类。这将为您提供各种信息。

EG:Application.ExecutablePath

它还提供了做你想做的事情的方法。

编辑:另请参阅此处的注册表读/写说明:

http://www.c-sharpcorner.com/UploadFile/sushmita_kumari/RegistryKeys102082006061720AM/RegistryKeys1.aspx?ArticleID=0ce07333-c9ab-4a6a-bc5d-44ea2523e232

答案 1 :(得分:9)

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

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

string directory = Path.GetDirectoryName(appFileName);

提取目录。

string envPath = Environment.GetEnvironmentVariable("PATH");
Environment.SetEnvironmentVariable(envPath + ";" + yourPath); 

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

答案 2 :(得分:9)

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

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

答案 3 :(得分:2)

Application.StartupPath用于获取c#中的安装位置。

答案 4 :(得分:0)

  

就像我在“C:\ Program”中安装Nunit一样   文件“我可以通过给'nunit'来运行它   在cmd提示符,但如果我安装在一个   不同的位置我不能这样做。

可能您使用的是Windows Vista,它可以在Program Files中搜索,但不会查看其他文件夹。

  

在使用C#的Windows中,如何获取   软件的安装路径(for   例子考虑nunit)。?

这取决于您如何安装应用程序。安装程序知道路径,您可以编程安装程序将该路径写入某个位置,比如注册表。

  

还有如何设置路径变量   我们在环境变量中设置   这样我们就可以运行应用程序了   只需通过命令提示符。

How do I get and set Environment variables in C#?

答案 5 :(得分: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();
  }
}