我正在尝试在C#winforms应用程序中创建某些功能。
我希望能够复制在其应用中创建的诸如Discord,NVidia GeForce Experience和Steam之类的程序。可以在将已安装的应用程序链接到它们相应的可执行文件时显示它们的列表。
Discord扫描您的系统,以便它知道您已安装的每个应用程序,并在其界面中显示您当前正在玩的游戏,而无需用户输入任何信息。 (这是我所追求的功能中最相关的功能)
我知道如何检查C#中的注册表以返回已安装应用程序的列表。我已经看到许多关于Stackoverflow的问题,这不是我需要的帮助。
我遇到的麻烦是尝试从该列表中提取信息,以告诉我每个安装位置或运行游戏的.exe文件。
通过对此的研究,我发现通过这些注册表项确实没有可靠的方法。即使某些子项的名为“ InstallLocation”的值,也有一半没有填写实际路径。
这是我到目前为止的代码。 (我知道这不是唯一可以安装的地方程序,我只想创建一个可以正常运行的演示,然后查看currentUser和可以安装应用程序的其他路径。):>
static void Main(string[] args)
{
getPrograms();
}
private static void getPrograms()
{
string registry_key = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key))
{
foreach (string subkey_name in key.GetSubKeyNames())
{
using (RegistryKey subkey = key.OpenSubKey(subkey_name))
{
Console.WriteLine(subkey.GetValue("DisplayName"));
Console.WriteLine("-------------------------");
}
}
}
}
这可以显示已安装的程序,但是一半子键甚至没有设置其DisplayName值。
即使我可能必须通过安装程序之类的工具除草,对系统上的每个.exe进行扫描将是更好的方法吗?
TL; DR:我正在尝试显示已安装的应用程序的列表。当用户选择一个应用程序时,它将被放置在监视列表上,以便* my *应用程序知道所选应用程序何时运行以及何时关闭。
在此先感谢您提供的所有帮助或建议。
编辑:只需添加一下,我便具有监视所选应用程序何时运行以及何时关闭的代码。一切正常。 我只想允许从列表中选择选项,而不是填写应用程序名称和.exe位置的输入字段。
EDIT2:我知道我提供的代码用于控制台应用程序。我试图单独构建功能,然后将其与我现有的winforms应用集成。
答案 0 :(得分:1)
通常,此类程序为用户提供了一个链接,供用户单击(启动)-它不希望用户使用CMD来启动它-因此,它将一个条目放入Start Menu
(C:\ ProgramData \ Microsoft \ Windows \开始菜单\程序)。我认为这涵盖了您感兴趣的大多数程序。
每个条目都是一个.lnk文件,您可以使用该文件检查其Target
,该文件通常是可执行文件的完整路径。这是一些code example。希望这会有所帮助。