在多语言场景中检查已安装的应用程序

时间:2014-02-24 08:04:31

标签: c# wpf c#-4.0

在启动我的WPF应用程序时,我也开始使用iTunes.exe。 为此,我已经使用代码进行检查,如果已安装应用程序Itunes,则在应用程序启动时启动它。

当我使用具有英语文化的Windows时,它工作正常。

当我在日本机器上安装相同的设置时(我已经安装了Itunes),在应用程序启动时没有启动进程(iTunes.exe)。 这是因为文化差异吗?

public bool IsApplictionInstalled(string display_name)
    {
        RegistryKey key;

        // search in: CurrentUser
        key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
        bool appInstalledUnderCurrentUser = SearchInstalledApplication(key, display_name);

        // search in: LocalMachine_32
        key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
        bool appInstalledUnderLocalMachine32 = SearchInstalledApplication(key, display_name);

        // search in: LocalMachine_64
        key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall");
        bool appInstalledUnderLocalMachine64 = SearchInstalledApplication(key, display_name);


        if (appInstalledUnderCurrentUser || appInstalledUnderLocalMachine32 || appInstalledUnderLocalMachine64)
            return true;
        else
            return false;
    }


private bool SearchInstalledApplication(RegistryKey key, string display_name)
    {
        string displayName;
        if (key != null)
        {
            foreach (String keyName in key.GetSubKeyNames())
            {
                RegistryKey subkey = key.OpenSubKey(keyName);
                displayName = subkey.GetValue("DisplayName") as string;
                if (display_name.Equals(displayName, StringComparison.OrdinalIgnoreCase) == true)
                {
                    return true;
                }
            }
        }
        return false;
    }

我也在日本机器上检查过该应用程序是否存在于具有相同显示名称“iTunes”的注册表中。为什么会这样呢?无法理解。

0 个答案:

没有答案