C# 如何获取应用程序的安装路径? 在Windows中使用C++语言,如何从我的项目中获得一个软件的安装路径(例如,考虑NUnice或任何其他软件,如MS Word等)?还有,如何设置我们在环境变量中设置的路径变量,以便我们只需给出命令提示符就可以运行应用程序

C# 如何获取应用程序的安装路径? 在Windows中使用C++语言,如何从我的项目中获得一个软件的安装路径(例如,考虑NUnice或任何其他软件,如MS Word等)?还有,如何设置我们在环境变量中设置的路径变量,以便我们只需给出命令提示符就可以运行应用程序,c#,windows,C#,Windows,例如,如果我在“C:\Program Files”中安装NUnit,我可以通过在cmd提示符中提供“NUnit”来运行它,但是如果我安装在其他位置,我就不能这样做。 我需要从我的项目中获取NUnit或系统中安装的任何其他软件(使用Windows XP)的位置或路径。 编辑: 就像我可以从注册表中获取已安装程序的路径一样。 HKEY_当前用户->软件使用系统和应用程序类。这会给你各种各样的信息 例如:Application.ExecutablePath 它还提供了一些方法来做您想做的事情 编辑:另

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

编辑: 就像我可以从注册表中获取已安装程序的路径一样。
HKEY_当前用户->软件使用系统和应用程序类。这会给你各种各样的信息

例如:Application.ExecutablePath

它还提供了一些方法来做您想做的事情

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

就像我在“C:\程序”中安装Nunit一样 文件“我可以通过输入'nunit'来运行它” 在cmd提示符中,但如果在 不同的地点我不能做同样的事

可能您正在使用Windows Vista,它可以在程序文件中搜索,但不会在其他文件夹中搜索

在使用C#的windows中,如何获取 软件的安装路径(用于 例如考虑nUngt)?

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

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

将为您提供可执行文件的完整路径,以及

string directory = Path.GetDirectoryName(appFileName);
提取目录

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

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

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


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

从注册表中提取值的步骤显示在下面的代码段中。 您可能已经知道,应用程序没有放置安装信息的标准规则。 下面显示的步骤适用于基于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();
  }
}
//字符串hiveName=@“CLSID”//适用于64位COM 7应用程序
字符串hiveName=@“WOW6432Node\CLSID”;//适用于32位COM应用程序
使用(注册表项key=Registry.ClassesRoot.OpenSubKey(hiveName))
{
if(key!=null){
使用(RegistryKey key2=key.OpenSubKey(“{}”))
{
如果(键2!=null){
使用(RegistryKey key3=key2.OpenSubKey(“LocalServer32”))
{
如果(键3!=null){
返回key3.GetValue(“”.ToString();
}
}

u我的意思是,我可以使用此链接从我的应用程序中获取任何已安装程序的路径。?感谢该链接。但我需要获取任何应用程序(如MS word、firefox等)的安装文件夹。我能想到的唯一方法是读取环境path变量。拆分路径,然后在所有文件夹中搜索。这不应该是一项任务。一些伪路径代码:envPath=System.Environment.GetEnvironmentVariable('Path');string[]Path=envPath.Split(':');foreach(路径中的字符串路径)File.Exists(Path.Combine(Path,filename));这给出了我的项目的exe的位置,但我需要获取任何应用程序(如MS word、firefox等)的安装文件夹。
Application.ExecutablePath (includes filename)
Application.StartupPath (not includes filename)
//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();
  }
}