C# 检查是否安装了Skype

C# 检查是否安装了Skype,c#,skype,C#,Skype,我试图修复一个方法,检查用户的计算机上是否安装了Skype。这是我修复/想出的: 我的计算机上安装了Skype 我已经修复了一个方法,它可以在我安装的所有程序中循环 我的方法可以找到我安装的程序,但无法找到skype,尽管它已安装。但是我的方法会查找同一目录中的其他程序 有人对如何检查计算机上是否安装了Skype有什么想法吗 我使用的方法与此类似: 只需使用注册表即可: using Microsoft.Win32; //Function uses Microsoft.Win32 to

我试图修复一个方法,检查用户的计算机上是否安装了Skype。这是我修复/想出的:

  • 我的计算机上安装了Skype
  • 我已经修复了一个方法,它可以在我安装的所有程序中循环
  • 我的方法可以找到我安装的程序,但无法找到skype,尽管它已安装。但是我的方法会查找同一目录中的其他程序
  • 有人对如何检查计算机上是否安装了Skype有什么想法吗

    我使用的方法与此类似:

    只需使用注册表即可:

    using Microsoft.Win32;
    
        //Function uses Microsoft.Win32 to check registry value of
        //HKEY_CURRENT_USERSoftwareSkypePhoneSkypePath and returns false if
        //the key is null
        private bool isSkypeUser()
        {
            RegistryKey skype = Registry.CurrentUser.OpenSubKey(@"SoftwareSkypePhone");
    
            if (skype != null && skype.GetValue("SkypePath") != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    

    编辑:

    一个棘手的解决方法是在StartMenu文件夹中循环查找Skype快捷方式或文件夹。必须使用以下SpecialFolder枚举:

    var startMenuPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonPrograms)
    

    希望有帮助

    这可能有用。只需确保卸载后删除注册表值即可。3.我已经试过那种方法,但那一种对我不起作用。。我真的知道为什么@ssg如何检查注册表值是否仍然存在?从计算机卸载Skype,查看该值是否保留或删除。如果它保持不变,这种方法就行不通了。您可以尝试其他与Skype相关的注册表项。您可以使用Sysinternals中的ProcMon监视注册表活动。@AwmaN:从上面的链接:“要检查是否安装了Skype,请在regedit中检查以下密钥是否存在:HKCUSoftwareSkypePhone,SkypePath。”。此键指向skype.exe文件的位置。如果此密钥不存在,请检查HKLMSoftwareSkypePhone、SkypePath密钥是否存在。如果HKCU密钥不存在但存在HKLM密钥,则Skype已从管理员帐户安装,但未从当前帐户使用。“如果上述操作不适用于您,您可能还需要尝试检查以下键:HKEY_LOCAL_MACHINE\SOFTWARE\Classes\skype\shell\open\command,但这只会告诉您机器上是否安装了skype。