📄 formwriteimagedisk.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Management;
using System.Collections.Specialized;
using System.Collections;
using System.Threading;
using System.IO;
using System.Diagnostics;
namespace WrtImg
{
public partial class FormWriteImageDisk : Form
{
public FormWriteImageDisk()
{
InitializeComponent();
}
bool closeform = false;
private void FormWriteImageDisk_Load(object sender, EventArgs e)
{
olvColumnDevName.AspectGetter = delegate(object x) { return ((DeviceInfo)x).DeviceName; };
olvColumnDevSize.AspectGetter = delegate(object x) { return ((DeviceInfo)x).DeviceSize; };
//ThreadPool.QueueUserWorkItem(new WaitCallback(FindUSBDisk));
Thread ss = new Thread(new ParameterizedThreadStart(FindUSBDisk));
ss.IsBackground = true;
ss.Start(ss);
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.AutoReset = true;
}
private void buttonQuit_Click(object sender, EventArgs e)
{
closeform = true;
Application.Exit();
}
private void buttonSelectImageFile_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Recovery Image|*.img";
ofd.Multiselect = false;
ofd.Title = "Select a image file for create recovery disk";
if (ofd.ShowDialog() == DialogResult.OK) {
textBoxSelectImageFile.Text = ofd.FileName;
}
}
private void comboBoxSelectDrive_DropDown(object sender, EventArgs e)
{
//if (getLogicalUsbDisks() != null)
//{
// comboBoxSelectDrive.Items.Clear();
// comboBoxSelectDrive.Items.AddRange(getLogicalUsbDisks());
//}
}
private void buttonMake_Click(object sender, EventArgs e)
{
if (olvDevices.CheckedItems.Count != 1) {
MessageBox.Show("Check a usb disk,please."); return;
}
if (string.IsNullOrEmpty(textBoxSelectImageFile.Text )) {
MessageBox.Show("Need to select *.img file for create recovery disk."); return;
}
BackgroundWorker worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.WorkerSupportsCancellation = true;
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
DialogResult dr = MessageBox.Show("Make sure disk is ready","",MessageBoxButtons .YesNo );
if (dr == DialogResult.Yes)
{
if (!File.Exists(textBoxSelectImageFile.Text)) {
MessageBox.Show("File isn't exists.", textBoxSelectImageFile.Text);
return;
}
DeviceInfo dev = olvDevices.CheckedObject as DeviceInfo;
string cmdinfo = string.Format(" dd bs=4096k if={0} of={1}", textBoxSelectImageFile.Text, dev.DeviceName);//busybox.exe
//busybox.exe dd bs=4096k if=H:\boot\imgs\xly.img of=/dev/sdb
if (worker.IsBusy)
{
MessageBox.Show("It's working busy."); return;
}
buttonMake.Enabled = false;
worker.RunWorkerAsync(cmdinfo);
}
}
int busyboxProcessID = -1;
System.Timers.Timer timer = new System.Timers.Timer(4000);
delegate void progresshandler(int progress);
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//MessageBox.Show(e.SignalTime.ToString ());
for (int t = 0; t < 40; t++)
{
progressBar1.Invoke(new progresshandler(delegate(int value) { progressBar1.Value = value; }), t);
System.Threading.Thread.Sleep(20);
}
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bgw = (BackgroundWorker)sender;
string cmdinfo = e.Argument.ToString();
//MessageBox.Show(cmdinfo);
//if (!File.Exists("busybox.exe")) { MessageBox.Show("[busybox.exe] File isn't exists"); return; }
//if (!File.Exists("cygcrypt-0.dll")) { MessageBox.Show("[cygcrypt-0.dll] File isn't exists"); return; }
//if (!File.Exists("cygwin1.dll")) { MessageBox.Show("[cygwin1.dll] File isn't exists"); return; }
Process p = new Process();
//p.StartInfo.FileName = "busybox.exe";
ProcessStartInfo pstartinfo = new ProcessStartInfo("busybox.exe", cmdinfo);
p.StartInfo = pstartinfo;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
p.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived);
p.Exited += new EventHandler(p_Exited);
timer.Enabled = true;
p.Start();
busyboxProcessID = p.Id;
string strOutput = string.Empty;
//p.StandardInput.WriteLine(cmdinfo);
p.StandardInput.WriteLine("busybox.exe ps");
/*
E:\EMP600\workspace\WrtImg\WrtImg\bin\Release>busybox.exe dd bs=4096k if=H:\boot
\imgs\maxdos.img of=/dev/sdb
2+1 records in
2+1 records out
*/
p.BeginErrorReadLine();
p.BeginOutputReadLine();
//bool finished = false;
//while (!finished) {
// strOutput = p.StandardOutput.ReadLine();
// //strOutput = p.StandardOutput.ReadToEnd();
// MessageBox.Show(strOutput+"3");
// if (strOutput.Contains("records out")) {
// MessageBox.Show(strOutput);
// p.StandardInput.WriteLine("exit");
// finished = true;
// }
//}
p.WaitForExit();
////p.Kill();
p.Close();
}
delegate void SetLableText(string str);
void sdf(string txt)
{
label4.Text = txt;
}
void p_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
string strOutput = e.Data;
if (strOutput == null) return;
if (strOutput.Contains("records out"))
{
//MessageBox.Show("Done!" + e.Data);
MessageBox.Show("Create Finished!");
label4.Invoke(new SetLableText(delegate(string o) { label4.Text = o.ToString(); }), new object[] { "" });
buttonMake.Invoke (new buttonEnable(delegate(bool o) {buttonMake.Enabled =o;}), new object[] { true });
timer.Enabled = false;
timer.Stop();
timer.Close();
progressBar1.Invoke(new progresshandler(delegate(int value) { progressBar1.Value = value; }), 0);
closeform = true;
}
else {
label4.Invoke(new SetLableText(delegate(string o) { label4.Text += o.ToString(); }), new object[] { "waiting" });
//for (int i = 0; i > 10; i++)
//{
// Thread.Sleep(30);
// label4.Invoke(new SetLableText(delegate(string o) { label4.Text += o.ToString(); }), new object[] { " " });
// Thread.Sleep(30);
//}
}
}
delegate void buttonEnable(bool o);
void p_Exited(object sender, EventArgs e)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -