检查软件安装与否,如果没有,则使用c#进行安装

时间:2014-08-09 05:58:54

标签: c# wpf regedit

我已经完成了我的C#WPF应用程序,但我有一点问题:

我的WPF应用程序必须需要Adobe Flash和.net框架以及很少的软件才能正常运行 所以如果没有安装在客户端系统中,这个应用程序必须自动逐个安装这些软件,而不是由用户自己安装。

我对使用“HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall”进行检查的想法,但不知道如何完成?

string uninstallKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
            RegistryKey rk = Registry.LocalMachine.OpenSubKey(uninstallKey);
            {
                foreach (string skName in rk.GetSubKeyNames())
                {
                    RegistryKey sk = rk.OpenSubKey(skName);
                    {
                        if (sk.GetValue("DisplayName") == "Adobe Flash Player ActiveX")
                        {
                            MessageBox.Show("Installed");

                           // how to run the software one by one here???????

                        }

                    }
                }
            }

任何解决方案???

注意:我在笔式驱动器中将此应用程序提供给用户,因此我将所有需要的软件设置放在笔式驱动器中。

2 个答案:

答案 0 :(得分:1)

考虑到已经存在的大量安装程序,为应用程序创建自己的安装程序是一个耗时且容易出错的过程,没有任何意义可以处理。

我个人的建议是检查Windows Installer XML Toolkit(WiX)。它是完全免费的,允许您使用外部包构建完全自定义的安装程序/卸载程序,并直接在Visual Studio中集成。

尝试手动执行此操作并不像检测注册表项那么简单;你必须处理过时的版本,文件权限,安装选项,即使注册表项存在,程序可能不存在于系统上的可能性(仅举几个障碍)。 WiX将使用Windows Installer数据库引擎的强大功能来管理您的程序版本和外部依赖项。

答案 1 :(得分:0)

已经很晚了但得到了答案,你的问题对我也非常有帮助所以谢谢你:)

var keyName = @"SOFTWARE\Microsoft\Silverlight";
            using (var regKey = Registry.LocalMachine.OpenSubKey(keyName))
            {
                var version = regKey.GetValue("Version");
                if (version + "" == "5.1.30514.0")
                {
                    MessageBox.Show("Installed");
                }
                else
                {
                    MessageBox.Show("Uninstalled");
                }
                var DisplayName = regKey.GetValue("DisplayName");
                lsitBox1.Items.Add(version);
                // lsitBox1.Items.Add(DisplayName);
            }