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

本文关键字:安装 如果没有 软件 检查 是否 | 更新日期: 2023-09-27 18:17:08

我已经完成了我的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???????
                        }
                    }
                }
            }

任何解决方案? ?

注意:我给这个应用程序的用户在笔驱动器,所以我把所有需要的软件设置在笔驱动器本身。

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

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

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

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

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

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);
            }