静默安装 Dot net 4.5 作为依赖项
Install Dot net 4.5 silently as adependency
我有一个静默安装的设置,但它依赖于 dot net framework 4.5,所以我该如何创建
一个安装程序,它也可以静默安装依赖项。
Setup is created in Install Shield and it is a wpf application
应该可以使用像
这样的命令行
dotNetFx45_Full_setup.exe /q /norestart
使用网络引导程序在线下载框架
编辑:只看到您不想包含 .net 4.5 安装程序...
编辑:代码固定
这是您的需要,只需更改下载路径,如果安装了 silverlight,我会在注册表中找到它,它将检查您是否可以对 .net 框架执行相同的操作,如果它不存在,则自动下载并通过临时安装 file.Download 在 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
{
/// <summary>
/// Interaction logic for ControlPanelFinal.xaml
/// </summary>
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();
}
}
}
}
我有一个静默安装的设置,但它依赖于 dot net framework 4.5,所以我该如何创建 一个安装程序,它也可以静默安装依赖项。
Setup is created in Install Shield and it is a wpf application
应该可以使用像
这样的命令行dotNetFx45_Full_setup.exe /q /norestart
使用网络引导程序在线下载框架
编辑:只看到您不想包含 .net 4.5 安装程序... 编辑:代码固定
这是您的需要,只需更改下载路径,如果安装了 silverlight,我会在注册表中找到它,它将检查您是否可以对 .net 框架执行相同的操作,如果它不存在,则自动下载并通过临时安装 file.Download 在 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
{
/// <summary>
/// Interaction logic for ControlPanelFinal.xaml
/// </summary>
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();
}
}
}
}