我已经完成了我的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???????
}
}
}
}
任何解决方案???
注意:我在笔式驱动器中将此应用程序提供给用户,因此我将所有需要的软件设置放在笔式驱动器中。
答案 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);
}