【问题标题】:check software installed or not, if not then install using c#检查软件是否安装,如果没有,则使用 c# 安装
【发布时间】:2014-08-09 05:58:54
【问题描述】:

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

我的 WPF 应用程序必须需要 Adob​​e 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#问题,而是如何部署应用程序en.wikipedia.org/wiki/List_of_installation_software
  • @mikez 是的,实际上我将这个应用程序放在笔式驱动器中给用户,所以我将所有软件安装程序都放在笔式驱动器中。
  • 你使用的是什么安装程序

标签: c# wpf regedit


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回复,但我需要通过编码来做到这一点
  • WiX 工具包是编码,它是您添加到解决方案中的一个项目,然后编写 XML 以指示引擎了解您的安装要求。为什么要重新发明轮子并花时间在一个已经被其他了解安装程序数据库内部结构的人完善的过程中排除错误?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 2013-03-24
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    相关资源
    最近更新 更多