默默安装Dot net 4.5作为依赖

我有一个静默安装的设置,但它具有dot net framework 4.5的依赖性,所以我如何创建一个安装程序,以静默方式安装依赖项。

Setup is created in Install Shield and it is a wpf application 

应该可以使用命令行

 dotNetFx45_Full_setup.exe /q /norestart 

使用Web引导程序在线下载Framework

也许看看这里和这里

编辑:只是看到您不想包含.net 4.5设置…编辑:代码已修复

这是你的需要,只需更改下载路径我发现它与注册表如果Silverlight安装与否它将检查你可以做.net框架,如果它不存在自动下载和通过临时文件轻松安装。在Temp下载并安装从临时:)

 using Microsoft.Win32; using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; namespace ControlPanel { ///  /// Interaction logic for ControlPanelFinal.xaml ///  public partial class ControlPanelFinal : Window { private readonly BackgroundWorker _bw = new BackgroundWorker(); public ControlPanelFinal() { InitializeComponent(); SilverLightInstall(); _bw.DoWork += _bw_DoWork; _bw.RunWorkerCompleted += _bw_RunWorkerCompleted; _bw.ProgressChanged += _bw_ProgressChanged; // _bw.WorkerReportsProgress = true; } void _bw_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressbar1.Value = e.ProgressPercentage; } void _bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if ((e.Cancelled == true)) { this.textblock1.Text = "Completed"; } else if (!(e.Error == null)) { this.textblock1.Text = ("Error :" + e.Error.Message); } else { progressbar1.Maximum = 100; progressbar1.Minimum = 1; progressbar1.Value = progressbar1.Maximum; textblock1.Text = "Completed"; } } void _bw_DoWork(object sender, DoWorkEventArgs e) { for (int i = 0; i <= 100; i++) { (sender as BackgroundWorker).ReportProgress(i); Thread.Sleep(100); } string filepath = Path.Combine(Path.GetTempPath(), "Silverlight.exe"); Process p = new Process(); p.StartInfo.FileName = filepath; p.StartInfo.Arguments = string.Format(" /q /i \"{0}\" ALLUSERS=1", filepath); p.StartInfo.Verb = "runas"; p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.UseShellExecute = true; p.Start(); } private void SilverLightInstall() { var Key1 = @"SOFTWARE\Microsoft"; using (var regKey1 = Registry.LocalMachine.OpenSubKey(Key1)) { if (regKey1.GetSubKeyNames().Contains("Silverlight")) { textblock1.Text = "Install"; checkbox1.IsEnabled = false; } else { checkbox1.IsEnabled = true; string filename = Path.Combine(Path.GetTempPath(), "Silverlight.exe"); using (StreamWriter sw = new StreamWriter(filename)) { sw.WriteLine("Error"); } WebClient client = new WebClient(); client.DownloadProgressChanged += client_DownloadProgressChanged; client.DownloadFileCompleted += client_DownloadFileCompleted; client.DownloadFileAsync(new Uri("http://download.microsoft.com/download/F/8/C/F8C0EACB-92D0-4722-9B18-965DD2A681E9/30514.00/Silverlight_x64.exe"), filename); } } } void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) { textblock2.Text = " Download Completed"; btnInstall.IsEnabled = true; } void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { btnInstall.IsEnabled = false; double byteIn = double.Parse(e.BytesReceived.ToString()); double totalBytes = double.Parse(e.TotalBytesToReceive.ToString()); double percentage = byteIn / totalBytes * 100; textblock2.Text = "Download " + e.BytesReceived / 1024 + " Of " + e.TotalBytesToReceive / 1024; progressbar1.Value = int.Parse(Math.Truncate(percentage).ToString()); } private void Button_Click_1(object sender, RoutedEventArgs e) { if (_bw.IsBusy == false) { _bw.RunWorkerAsync(); } } } }