gpt4 book ai didi

c# - 如何使用C#查找第三方应用程序(如Google Earth)的安装目录?

转载 作者:行者123 更新时间:2023-11-30 19:08:31 24 4
gpt4 key购买 nike

我有以下代码片段启动了一个 Google Earth使用硬编码路径的过程:

var process =
new Process
{
StartInfo =
{
//TODO: Get location of google earth executable from registry
FileName = @"C:\Program Files\Google\Google Earth\googleearth.exe",
Arguments = "\"" + kmlPath + "\""
}
};
process.Start();

我想以编程方式从某个地方(很可能是注册表)获取 googleearth.exe 的安装位置。

最佳答案

显然,如果您要打开与程序关联的特定文件,则最好通过该文件启动它(例如,用户可能有一个与他们喜欢使用的文件类型关联的程序)。

这是我过去用来启动与特定文件类型关联的应用程序但实际上没有打开文件的方法。可能有更好的方法。

static Regex pathArgumentsRegex = new Regex(@"(%\d+)|(""%\d+"")", RegexOptions.ExplicitCapture);
static string GetPathAssociatedWithFileExtension(string extension)
{
RegistryKey extensionKey = Registry.ClassesRoot.OpenSubKey(extension);
if (extensionKey != null)
{
object applicationName = extensionKey.GetValue(string.Empty);
if (applicationName != null)
{
RegistryKey commandKey = Registry.ClassesRoot.OpenSubKey(applicationName.ToString() + @"\shell\open\command");
if (commandKey != null)
{
object command = commandKey.GetValue(string.Empty);
if (command != null)
{
return pathArgumentsRegex.Replace(command.ToString(), "");
}
}
}
}
return null;
}

虽然有时候您想要在不打开文件的情况下启动特定程序。通常(希望)该程序有一个带有安装位置的注册表项。以下是如何以这种方式启动 Google 地球的示例。

private static string GetGoogleEarthExePath()
{
RegistryKey googleEarthRK = Registry.CurrentUser.OpenSubKey(@"Software\Google\Google Earth Plus\");
if (googleEarthRK != null)
{
object rootDir = googleEarthRK.GetValue("InstallLocation");
if (rootDir != null)
{
return Path.Combine(rootDir.ToString(), "googleearth.exe");
}
}

return null;
}

关于c# - 如何使用C#查找第三方应用程序(如Google Earth)的安装目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/191250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com